Могу ли я ждать задания, созданного в другом потоке? Например:Как подождать одной задачи на двух разных потоках?
...
CurrentIteration = Execute(); // returns Task
await CurrentIteration;
...
А потом, в другом потоке:
...
await CurrentIteration;
...
1) Будет ли второй поток ждать метод Execute, чтобы закончить выполнение? 2) Если это будет, я буду иметь возможность повторно использовать 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!!!!!
. Почему это? Как я могу это достичь? Благодаря!
Вы не ожидаете задачи, с которой вы начинаете. На самом деле, вы должны получить предупреждение в intellisense, говорящее вам только об этом. Если вы этого не ожидаете, иногда он будет выполняться до 'thread 1 done', иногда это не будет. – Rob
Вы имеете в виду, что я должен поставить 'await' перед' Task.Run ... '? – nicks
Это правильно, да – Rob