[英]How to await for one task on two different threads?
我可以等待在其他線程上創建的任務嗎? 例如:
...
CurrentIteration = Execute(); // returns Task
await CurrentIteration;
...
然后,在另一個線程上:
...
await CurrentIteration;
...
CurrentIteration = Execute(); // returns Task await CurrentIteration;
在第一個線程上?
我嘗試了這段代碼:
public class Program
{
public static void Main(string[] args)
{
MainAsync(args).GetAwaiter().GetResult();
}
public static async Task MainAsync(string[] args)
{
var instance = new SomeClass();
var task = instance.Execute();
Console.WriteLine("thread 1 waiting...");
Task.Run(async () =>
{
Console.WriteLine("thread 2 started... waiting...");
await task;
Console.WriteLine("thread 2 ended!!!!!");
});
await task;
Console.WriteLine("thread 1 done!!");
Console.ReadKey();
}
}
public class SomeClass
{
public async Task Execute()
{
await Task.Delay(4000);
}
}
但它打印
thread 1 waiting...
thread 2 started... waiting...
然后
thread 1 done!!
但是thread 2 ended!!!!!
永遠不會thread 2 ended!!!!!
。 這是為什么? 我該如何實現? 謝謝!
您可以await
來自多個線程的任務。 正如@Rob所說,實際上您真的很接近要使它起作用,您只需要await
第二個線程即可。
考慮一下:
public static async Task MainAsync(string[] args)
{
var instance = new SomeClass();
var task = instance.Execute();
Console.WriteLine("thread 1 waiting...");
var secondTask = Task.Run(async () =>
{
Console.WriteLine("thread 2 started... waiting...");
await task;
Console.WriteLine("thread 2 ended!!!!!");
});
await task;
await secondTask;
Console.WriteLine("thread 1 done!!");
Console.ReadKey();
}
等待任務完成后,在第二個線程上添加等待。
您沒有看到指示的原因是因為控制台卡在了ReadKey
方法上,並且在完成之前無法編寫任何內容。 如果您按Enter鍵,則會看到“線程2已結束!!!!!!” 在應用程序關閉之前等待一秒鍾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.