我是 C# 新手,我試圖弄清楚 async 和 await 。為了練習,我試圖啟動方法 1,其中方法 2 被呼叫兩次。方法 2 取一個值,每 200 ms 將其增加 1。程式在方法 1 的第一行之后結束,而不是運行方法 2。
static void Main(string[] args)
{
Method1();
}
static int Method2(int x)
{
for (int i = 0; i < 10; i )
{
x = 1;
Console.WriteLine(x);
Thread.Sleep(200);
}
Console.WriteLine("final" " " x " " Thread.CurrentThread.ManagedThreadId);
return x;
}
static async Task Method1()
{
Console.WriteLine("1 running");
int result1 = await Task.Run(() => Method2(0));
int result2 = await Task.Run(() => Method2(result1));
Thread.Sleep(1000);
Console.WriteLine("result " result2 * 2);
}
我在這里做錯了什么?
uj5u.com熱心網友回復:
當你打電話時Method(),你不是在等它。它回傳一個未執行的任務物件,然后Main()盡職地回傳,從而結束程式。
你可以這樣做Main():
public static void Main() {
Method1().GetAwaiter().GetResult();
}
或async Main()改用:
public static async Task Main() {
await Method1();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/517867.html
標籤:C#异步异步等待
上一篇:如果我對discord.py命令使用幫助功能,我應該使用await來呼叫我的幫助功能還是將控制權轉移給我的異步幫助器
