![](/img/trans.png)
[英]Asynchronous console program hangs on completion of task using CefSharp
[英]Task and asynchronous in Console program
我剛剛閱讀了控制台項目中的特殊情況。 你能告訴我我的做法是否正確嗎? 那里有兩個工作我不確定我是否應該像在這里一樣使用等待在Task.Run中,如果它是正確的你可以解釋如果我從這里刪除兩個等待會有什么不同。 接下來的問題如果我將從WhenAny刪除.Wait()。 一般來說它是控制台應用程序的正確方法 忘記提出異步Main到目前為止,讓我們談談void。
public class Program
{
public static void Main()
{
//jobs can work in parael not blocking program
var job0 = Task.Run(async () => await new DoThisAsync().Run());
var job1 = Task.Run(async () => await new DoThatAsync().Run());
//Any Independent synchronous work can run meantime jobs
IndependentSynchronousMethod;
//We wait on tasks
Task.WhenAll(job0, job1).Wait();
}
}
大部分代碼都不需要
此外,如果您使Main
async
您可以執行以下操作
public static async Task Main()
{
var job0 = DoThisAsync();
var job1 = DoThatAsync();
//Any Independent synchronous work can run meantime jobs
IndependentSynchronousMethod;
//We wait on tasks
await Task.WhenAll(job0, job1)
}
使您的主要異步
Project -> Build -> Advanced - Language Version >= 7.1
其他資源
創建將在所有提供的任務完成后完成的任務。
無法在控制台應用程序的“Main”方法上指定“async”修飾符
更新
Arie:要清楚地忘記Async Main
沒有異步簽名,您可以在控制台應用程序中執行此操作。
Task.WhenAll(job0, job1).Wait();
你的代碼錯了,不會編譯。 除此之外,您試圖在任務中包裝async
調用,在這種情況下這是多余的。 您正在嘗試創建一個任務來運行任務,而不需要它。
異步簽名默認返回一個任務,只需將它們傳遞給WhenAll
如果我只是在沒有等待的情況下調用Task.WhenAll(job0,job1),程序會在等待之前結束嗎?
調用async
方法將返回已啟動的任務。 因此,沒有必要強制它運行的實際代碼。 但是,因為任務已啟動,所以需要等待一些事情,或者在示例中該過程將結束
Task.WhenAll
聚合任務時,它不會為你啟動它們,但是如果你不wait
它,或者await
它,它的自我只是讓控制流程到應用程序的退出
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.