我想重构一些启动新线程的代码,以便异步等待这些代码在队列中执行长时间运行的任务。它在Framework4中,我正在升级到4.5.2
下面是旧代码
public void Spawn(object data)
{
var pts = new ParameterizedThreadStart(DoWork);
new Thread(pts).Start(data);
}
public void DoWork()
{
// things to run in new thread
}
如何让DoWork在新线程中运行?
我尝试过以下几种方法
public async Task DoWork()
{
// things to run in new thread
}
然而,我想不出如何在Spawn内部调用它。如果我尝试
await DoWork()
然后,intellisense想让我让Spawn()异步,所以这看起来像是一次大的重构。我走的路对吗?
发布于 2018-06-02 08:22:06
对于你来说,最简单的事情就是,如果你只是想让一些事情在后台线程上发生,那就是做下面的事情:
Task.Run( () => DoWork() );
然后,您不需要将DoWork函数设置为任务或异步。如果您仍然希望能够等待它,那么您可以等待Task.Run返回的任务,或者对它调用Wait()函数(如果这样做,请注意死锁的可能性)。
https://stackoverflow.com/questions/50652361
复制相似问题