C# 如何启动标记为async的方法?
我想在单独的线程上运行一个处理循环:C# 如何启动标记为async的方法?,c#,multithreading,async-await,C#,Multithreading,Async Await,我想在单独的线程上运行一个处理循环: \u processingThread=new Thread(new ThreadStart(DoWork)) 但DoWork需要异步: private async Task QueueProcessorDoWork() { while (true) { await something(); } } 我如何将两者连接在一起?当我添加异步任务时,它与ThreadStart的参数不匹配 我认为,设置线程异步任务的方法是可能的,但我不
\u processingThread=new Thread(new ThreadStart(DoWork))代码>
但DoWork需要异步:
private async Task QueueProcessorDoWork()
{
while (true)
{
await something();
}
}
我如何将两者连接在一起?当我添加异步任务时,它与ThreadStart的参数不匹配
我认为,设置线程异步任务的方法是可能的,但我不确定这是否有帮助
这里最好的解决方案是什么?我需要我的线程开始运行,然后返回。这将对指定的工作进行排队,以便在线程池上运行
_ = Task.Run(() => QueueProcessorDoWork());
QueueProcessorDowWork现在必须完全自给自足并自行处理。任何抛出的异常都不会被捕获。调用线程无法知道它是否成功
\u=
只会停止编译器警告未等待调用。\u processingTask=Task.Run(QueueProcessorDoWork)
?它是否创建新线程?基本上,这是windows服务的一部分,因此OnStart()方法需要设置某种无限处理循环,然后该方法必须立即返回。我认为你必须创建一个新的线程来实现这一点。但是可能是一个永无止境的任务
完成了任务?是否创建了一个新线程?
-是的,谢谢。看来我需要摆脱以前的任务前思维模式。Task.Run(…)
不会创建新线程,但队列可以为线程池工作,如果这项工作长期运行并多次调用,您可能会遇到线程不足。问题是某些东西是否真的需要异步?您正在为工作创建专用线程,所以阻止它应该不是问题。