我想重构一些启动新线程以使用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()Async,所以这开始看起来像一个大的重构。我在正确的道路上吗?
答案 0 :(得分:1)
如果您只想在后台线程上发生某些事情,最简单的事情就是执行以下操作:
Get-Content 'C:\Users\xyz\Downloads\mylog.log' |
Select-String 'string\.string1\.string2 - Request:' |
ForEach-Object { [string]::Join(' ', ([regex]::split($_, '\s+')[1,2,6,7,9,10,12,13])) }
然后您不需要将DoWork功能设置为Task或async。如果你仍然想要等待它的能力,那么你可以等待Task.Run返回的任务,或者调用它上面的Wait()函数(如果你这样做,请注意死锁潜力)。