我在Rider中遇到了一个奇怪的错误,因为我试图以不允许的方式转换为Task。奇怪的是,这些类型似乎完全匹配。
代码抛出错误
public IEnumerator GetCatalogItem_LevelDataId_PlayFabCatalogItemFound(string levelName,long levelDataId)
{
//Arrange
const string getCatalogItemCloudFunctionName = "getCatalogItem";
var data = new Dictionary<string, object>
{
{"itemId", levelDataId.ToString()}
};
//Act
var result = FirebaseFunctions.DefaultInstance
.GetHttpsCallable(getCatalogItemCloudFunctionName)
.CallAsync(data);
//BUG ERROR IS SHOWN ON result BELOW (SEE ATTACHED IMAGE)
yield return result.AsIEnumerator<HttpsCallableResult>();
var catalogItem = (IDictionary)result.Result.Data;
//Assert
Assert.AreEqual(levelName,catalogItem["DisplayName"].ToString());
}
使用的任务扩展方法
public static class TaskExtensions
{
/// <summary>
/// Converts a <see cref="System.Threading.Tasks.Task"/> to <see cref="IEnumerator"/> (helps with unity coroutines)
/// </summary>
/// <param name="task">The task to convert</param>
/// <returns>An IEnumerator which waits till the task has been completed</returns>
public static IEnumerator AsIEnumerator(this Task task)
{
while (!task.IsCompleted)
{
yield return null;
}
if (task.IsFaulted)
{
throw task.Exception;
}
}
/// <inheritdoc cref="AsIEnumerator"/>
public static IEnumerator AsIEnumerator<T>(this Task<T> task)
{
while (!task.IsCompleted)
{
yield return null;
}
if (task.IsFaulted)
{
throw task.Exception;
}
}
}
抛出错误
无法转换实例参数类型"System.Threading.Tasks.Task<Firebase.Functions.HttpsCallableResult>[Firebase.Functions,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null]"到"System.Threading.Tasks.Task<Firebase.Functions.HttpsCallableResult>[msrorlib,版本=4.0.0.0,区域性=中性,PublicKeyToken=b77a5c561934e089]'
任务错误图像
Firebase根据其文档提供了自己的Task
和Task<T>
实现:https://firebase.google.com/docs/reference/unity/class/system/threading/tasks/task
看起来您需要在代码中更明确地使用哪一个,以便将正确的一个解析为您希望使用的引用。