(問題的真正標題應該是「爲什麼我會得到'無法投射類型'System.Runtime.CompilerServices.TaskAwaiter`1 [System.Runtime.CompilerServices.VoidTaskResult]'的對象來鍵入'System.Runtime .CompilerServices.INotifyCompletion'」,但不幸的是這是StackOverflow的太長。:)爲什麼在等待任務返回方法時出現InvalidCastException?
嗨,
試圖await
我的一個方法的執行時,我變得非常奇特的問題。調用代碼如下所示(節選):
private async Task DownloadAddonFileAsync(dynamic addon, dynamic file, string targetFolder)
{
// ...
await DownloadFileAsync(file, targetFolder, uri);
的DownloadFileAsync看起來是這樣的:
protected async Task DownloadFileAsync(dynamic file, string targetFolder, string uri)
{
// ...
var fileBytes = await AppLoaderRestClient.GetAsync<byte[]>(uri);
的AppLoaderRestClient.GetAsync(),反過來,看起來是這樣的:
public static async Task<T> GetAsync<T>(string uri)
{
// ...
if (typeof (T) == typeof (byte[]))
{
var result = await webClient.DownloadDataTaskAsync(uri);
return (T) (object) result;
}
因此,這裏實際上有一個任務鏈 - 「內部」任務將是一個任務,然後將其傳播給調用者,並轉換爲Tas k(即沒有結果的任務)。我認爲這可能導致手頭的問題?
如果我改變最代碼這樣:
var task = DownloadFileAsync(file, targetFolder, uri);
task.Wait();
...它完美的作品。爲什麼?