题
我有这样的东西:
private void DoSomething()
{
System.Console.WriteLine("Creating Foo");
Foo result = new Foo();
DoSomethingAsync();
System.Console.WriteLine("Returning Foo");
return result;
}
private async void DoSomethingAsync()
{
// The following task takes a long time, but is not CPU intensive
await TaskEx.Run(() =>
{
// code lives here... removed for this example
});
}
由于我不打CPU太多,因此我不需要线程。我可以使用什么而不是运行以避免创建线程?
解决方案
我认为您在这里误解了任务异步模式的意图。您正在做的可能更好地处理 ThreadPool.QueueUserWorkItem
它将从该过程的池中重复使用一个工人线程,仅在必要时创建一个。
TAP允许您将任务分解为可以逐步处理的“块”工作的“块”,但并未直接提供说“这是背景任务”的手段。
其他提示
这取决于您正在执行的任务。由于您说它不使用很多CPU,因此我假设该任务需要很长时间,因为它正在等待其他事件。因此,您需要设计任务以注册那些事件的回调,在该事件中,每个回调在主线程上很快完成,但是直到您正在等待的事件实际发生之前,都不会触发。
不隶属于 StackOverflow