1

我有这样的事情:

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 的影响不大,因此我不需要线程。我可以使用什么来代替 Run 来避免创建线程?

4

2 回答 2

1

我认为您在这里误解了任务异步模式的意图。您正在做的事情可能会更好地处理,ThreadPool.QueueUserWorkItem这将重用进程池中的工作线程,仅在必要时创建一个。

TAP 允许您将任务分解为可以增量处理的工作“块”,但它不直接提供一种表示“这是后台任务”的方法。

于 2011-01-25T23:49:00.523 回答
0

这取决于您正在执行的任务。既然你说它不使用很多 CPU,我会假设该任务需要很长时间,因为它正在等待其他事件。因此,您需要设计您的任务来为这些事件注册回调,其中每个回调在主线程上快速完成,但在您等待的事件实际发生之前不会触发。

于 2011-01-25T23:47:13.537 回答