別のスレッドで作成されたタスクを待つことはできますか?たとえば、次のように2つの異なるスレッドで1つのタスクを待つ方法は?
...
CurrentIteration = Execute(); // returns Task
await CurrentIteration;
...
そして、別のスレッドで:
...
await CurrentIteration;
...
1)メソッドの第二のスレッドの待機が実行を完了するために実行されますか? 2)場合、私が最初のスレッドで
CurrentIteration = Execute(); // returns Task
await CurrentIteration;
を再実行することを考えると、第二のスレッドで同じ目的のために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 1 done'の前に実行されることもあります。 – Rob
あなたは 'Task.Run ...'の前に 'await'を置くべきですか? – nicks
それは正しい、はい – Rob