C# 重构参数化线程启动到异步等待

C# 重构参数化线程启动到异步等待,c#,async-await,C#,Async Await,我想重构一些启动新线程以使用async await的代码 代码在队列中执行长时间运行的任务。它是在框架4中,我正在升级到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 }

我想重构一些启动新线程以使用async await的代码 代码在队列中执行长时间运行的任务。它是在框架4中,我正在升级到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()设置为异步,因此这看起来像是一个大的重构。我走的路对吗?

如果您只想在后台线程上发生一些事情,那么最简单的方法就是执行以下操作:

Task.Run( () => DoWork() );

这样就不需要将DoWork函数设置为Task或async。如果您仍然希望能够等待它,那么您可以等待task.Run返回的任务,或者对其调用Wait()函数(如果这样做,请注意死锁的可能性)。

您是要在新进程或新线程中调用此函数吗?注意:“进程”和“线程”的含义不同。流程是应用程序的完全独立的实例(您可以在任务管理器中看到它们)。线程是同一应用程序中的单个辅助线程,它们或多或少地彼此独立运行。你想做什么?哎呀,谢谢,我把问题改成了线程。你为什么一开始就创建一个新线程,而不是使用线程池?这是长跑吗?您是否希望从
DoWork
返回结果?任务正在长时间运行,虽然它确实会回调,但不会返回结果。谢谢你的问题,为什么它是一个新的线程。我正在学习
https://stackoverflow.com/questions/230003/thread-vs-threadpool?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa
尝试了解做出此决定的原因。