Следующая программа разработана с использованием общей Task.Run() и использует async и ждет (асинхронно). В обоих случаях другой поток берется из пула потоков для новой задачи. Итак, в чем разница? Асинхронный означает, что он должен использовать основной поток и освобождать его до завершения задачи. Но он также использует другой поток, а не использует основной поток.В чем разница между Task.Run() и ожиданием Task.Run()?
public class Worker2
{
public bool IsComplete { get; private set; }
internal void DoWork()
{
this.IsComplete = false;
Console.WriteLine("Doing Work.");
Task.Run(new Action(LongOperation));
Console.WriteLine("Work Completed");
IsComplete = true;
}
private void LongOperation()
{
Console.WriteLine("long operation thread thread :" + Thread.CurrentThread.ManagedThreadId);//Thread Id = 7. it is different from main thread id.
Console.WriteLine("Working!");
Thread.Sleep(3000);
}
}
// И асинхронные
public class Worker2
{
public bool IsComplete { get; private set; }
internal async void DoWork()
{
this.IsComplete = false;
Console.WriteLine("Doing Work.");
await LongOperation();
Console.WriteLine("Work Completed");
IsComplete = true;
}
private Task LongOperation()
{
return Task.Run(() =>
{
Console.WriteLine("long operation thread thread :" + Thread.CurrentThread.ManagedThreadId);
Console.WriteLine("Working!");
Thread.Sleep(3000);
});
}
}
Пожалуйста, уделите немного времени, чтобы отформатировать свой код - отступом все надлежащим образом, заблокировать его цитатой на 4 символа, чтобы он * все * отображался как код и удалял пустую строку между каждой полезной строкой. –
Обратите внимание, что в первом примере вы получаете надпись «Work Complete» перед ее завершением. –
Я спрашиваю о том, как потоки используются из пула потоков в обоих случаях. – user3783446