【发布时间】:2021-12-29 06:16:14
【问题描述】:
我最近遇到了一些让我很困惑的代码,我一直认为你必须使用线程或异步任务,而不是在它们之间混搭,
public async Task DoWork()
{
Task.Delay(1000);
}
现在我看到代码是这样调用的:
public void Main()
{
var thread = new Thread(async () => { await DoWorkAync(); })
{
Priority = ThreadPriority.Highest,
IsBackground = true
};
// Start thread
proccessThread.Start();
}
现在这神奇地似乎没有在每次运行时创建一个线程,它似乎正在使用ThreadPool。
现在我很难理解的是上述和以下之间的区别:
public void Main()
{
var task = Task.Run(DoWorkASync);
}
从我的测试来看,似乎 C# 线程在传入异步表达式与运行的标准方法时具有不同的功能>
【问题讨论】:
-
这很令人困惑,因为每个 sn-p 本身都是错误的。首先,没有等待。在第二个中,启动了与创建的线程不同的线程,在第三个中再次启动:不等待任务完成。
-
Thread构造函数不知道async,因此线程将启动异步任务并立即完成,而无需等待异步处理完成。
标签: c# multithreading async-await task threadpool