[英]async await on anonamous methods
這有效
Task <string> t = Task <string> .Factory.StartNew(() => {
return "test";
});
但是,如果我將其更改為以下給出的錯誤,為什么呢?
Task <string> t = Task <string> .Factory.StartNew(asyc() => {
await Thread.sleep(10000);
return "test";
});
出現此問題的原因是async
方法不會返回string
而是返回Task<string>
。 因此,函數的正確返回值為Task<Task<string>>
。 請注意,一旦創建內部任務,外部任務將被標記為已完成,從那時起,您將必須等待內部任務。
我建議您不要使用Task.Factory.StartNew
,而Task.Run
使用Task.Factory.StartNew
,因為此函數具有正確處理async
內部函數並解包任務的重載。 使用Task.Run
是一個好主意,因為您很少需要Task
像Task.Factory.StartNew
那樣創建。
因此,我建議您將代碼更改為:
Task<string> t = Task.Run(async () =>
{
await Task.Delay(10000);
return "test";
});
但是,如果您確定要使用Task.Factory.StartNew
,則可以使用以下命令:
Task<Task<string>> t = Task.Factory.StartNew(async () =>
{
await Task.Delay(10000);
return "test";
});
編輯:剛剛發現您錯誤地使用Thread.Sleep
。 您需要返回Task
來等待它(或等待對象)。
延遲執行該功能的函數是Task.Delay
。 這為您提供了可以等待的Task
,該Task
將在設定的時間后完成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.