gpt4 book ai didi

c# - Task.Run() 和 await Task.Run() 有什么区别?

转载 作者:太空狗 更新时间:2023-10-29 22:09:06 25 4
gpt4 key购买 nike

以下程序是使用通用 Task.Run() 并使用 async 和 await(异步)设计的。在这两种情况下,都会从线程池中获取不同的线程来执行新任务。那么区别是什么呢?异步意味着它应该使用主线程并释放它直到任务完成。但它也在使用另一个线程而不是使用主线程。

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);
});
}
}

最佳答案

What is the difference between Task.Run() and await Task.Run()?

第一个开始一个任务,然后在该任务之后立即开始工作,在任务完成之前

第二个启动一个任务,然后执行不同的工作,直到任务完成,此时它执行任务之后的工作。

我们打个比方。你的第一个程序是这样的:

  • 雇人修剪草坪。
  • 告诉您的配偶草坪已经修剪过了。
  • 去看 Netflix。

你的第二个程序是:

  • 雇人修剪草坪。
  • 一边修剪草坪一边看 Netflix。
  • 当草坪修剪完并且电影结束时,告诉配偶草坪修剪完了。

显然,这些是非常不同的工作流程。两者都是异步的,但只有后者有一个异步等待。我们异步地等待告诉配偶草坪已经修剪过了,直到它真正修剪完

关于c# - Task.Run() 和 await Task.Run() 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37360905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com