我有这样的东西:

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,因此我假设该任务需要很长时间,因为它正在等待其他事件。因此,您需要设计任务以注册那些事件的回调,在该事件中,每个回调在主线程上很快完成,但是直到您正在等待的事件实际发生之前,都不会触发。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top