C# 对于长时间运行的操作,建议使用async/Wait吗?

C# 对于长时间运行的操作,建议使用async/Wait吗?,c#,.net,asynchronous,async-await,C#,.net,Asynchronous,Async Await,我的应用程序将不得不等待来自外部系统的一系列事件,这可能需要5分钟才能到达。是否建议使用异步/等待?如果不是,你应该用什么 谢谢 如果你这样开始你的任务,可能没问题。这将以“长时间运行”的方式启动任务,TPL可能会将其安排在不同的CPU上,并且不会使用线程池线程: void RunLongTask() { // long work to do // in case of wpf you can report progress to ui Dispatcher.In

我的应用程序将不得不等待来自外部系统的一系列事件,这可能需要5分钟才能到达。是否建议使用异步/等待?如果不是,你应该用什么


谢谢

如果你这样开始你的任务,可能没问题。这将以“长时间运行”的方式启动任务,TPL可能会将其安排在不同的CPU上,并且不会使用线程池线程:

void RunLongTask()
{
     // long work to do

     // in case of wpf you can report progress to ui
     Dispatcher.Invoke(ProgressDelegate, 0);

     // more work

     Dispatcher.Invoke(ProgressDelegate, 1);

     // etc...
}
async Task RunLongTaskAsync()
{
    await Task.Factory.StartNew(RunLongTask, TaskCreationOptions.LongRunning);
}

但这些问题始终取决于应用程序的总体工作负载及其运行的机器。如果你有足够的资源,谁会关心一个长时间运行的任务呢。但是如果你的机器很小,你想做很多其他的事情。。。当心。

什么“最多需要5分钟才能到达”?嗯。。这取决于。。。。此应用程序还需要做什么?它在哪台机器上运行?这是唯一一项需要等待5分钟或10分钟以上的任务吗?根据您提供的信息,我认为可以使用
async/await
,但如果您想在其他任务中做很多工作,可能不会……这个问题似乎太广泛或太基于观点。问题可能不是是否使用
async/await
,而是如何开始您的任务。请参阅,在这种情况下,
async
/
await
可能不是唯一的好选项,但对于长时间运行的任务,它是一个很好的选项。如果不使用async await,线程池中的可用线程数量是有限的。与长时间运行的任务相比,启动新线程所需的额外时间很小。考虑使用Stase.CuttoMultMeal.ButkWorkWork:轻松启动参数,便于报告进度,便于报告结果并易于取消。看,我明白了,勒内,但是在代码中,当工作线程中发生某个事件时,我如何“通知”用户界面?使用SyncronizationContext.Current或Dispatcher.Invoke?您在问题中没有指定任何UI框架(例如Windows.Forms、WPF)。你也没有要求通知。无论如何,既然你建议使用
Dispatcher.Invoke
我想你说的是WPF,那么使用
Dispatcher.Invoke
似乎是合适的。更新了我的答案并添加了一些进度报告调用。