[英]Cannot implicitly convert type 'void' to 'object' on GetAwaiter().GetResult()
我們使用以下代碼來等待方法執行,因為我們有必須使用異步方法的同步方法,這是我們在項目中使用的包裝器
public dynamic RunTask(dynamic method) {
var result = Task.Run(async () => await method).ConfigureAwait(false);
return result.GetAwaiter().GetResult();
}
當方法具有返回類型時,這行代碼似乎可以正常工作: Task< int > 但是今天當我編寫非返回方法時,當 Task 沒有返回值時它會拋出異常
// throws exception in this case 'Cannot implicitly convert type 'void' to 'object'
public async Task Run(){
await //;
}
// Works
public async Task<int> Fun(){
return await //;
}
從消息中,它顯然無法將 void 分配給 object 但是我是否缺少一些東西,如何讓它工作 void 任務。 我們正在使用 .net 內核 3.1。 任何幫助是極大的贊賞。
你在打電話嗎 RunTask(); 該方法不返回任何內容? :)
首先這是一個不好的做法。 異步調用的最佳方式是遵循等待模式。 這是這樣的
private Task MyMethodAsync(){
}
public async void Main(){
await MyMethodAsync();
}
現在,如果它還沒有到位,那么實現 await 模式可能會有點困難(因為它可能需要等待鏈中的所有調用)。 你能做的如下:
MyMethodAsync().Wait()
這將阻塞調用線程並等待任務完成。 因為它是無效的,所以你不會得到任何結果,這就是你首先得到這個異常的主要原因。
您可以根據自己的目的嘗試此代碼,但正如 Marc 建議的那樣,這不是推薦的做法:
public dynamic RunTask(dynamic method)
{
if (method is Task)
{
method.ConfigureAwait(false).GetAwaiter().GetResult();
return 0;
}
else
{
var result = Task.Run(async () => await method).ConfigureAwait(false);
return result.GetAwaiter().GetResult();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.