C# 有效的非阻塞执行
我实现了一个在云上运行的服务。我有一个方法C# 有效的非阻塞执行,c#,azure,asynchronous,cloud,async-await,C#,Azure,Asynchronous,Cloud,Async Await,我实现了一个在云上运行的服务。我有一个方法fastExecute(),它使一些计算非常快。 我需要在这个方法中添加一个调用,调用其他可以在后台执行的方法,这个调用对它何时完成工作并不重要,但应该完成!。最主要的是它最终会完成它的工作 所以我想: fastExecute() { Task task = IndependentBackgroundMethodAsync(); //fast code await t; < - could cause fastExecute not to be f
fastExecute()
,它使一些计算非常快。
我需要在这个方法中添加一个调用,调用其他可以在后台执行的方法,这个调用对它何时完成工作并不重要,但应该完成!。最主要的是它最终会完成它的工作
所以我想:
fastExecute()
{
Task task = IndependentBackgroundMethodAsync();
//fast code
await t; < - could cause fastExecute not to be fast
}
不承诺IndependentBackgroundMethodAsync最终将被执行并完成其工作
做我需要做的事情的最佳实践是什么?如果您想异步执行您的
独立BackgroundMethodAsync
,并且您关心结果,我将使用继续执行(请参阅)
任务完成后,将执行继续任务
fastExecute()
{
Task task = IndependentBackgroundMethodAsync();
task.ContinueWith(result => // handle result);
//fast code
}
fastExecute()方法是否需要后台执行的结果?为什么您会认为wait task
会导致您的方法不执行“fast”?另外,解释一下“fast”的实际含义也不错。@OldFox-不,是这样的`t@YuvalItzchakov-ahalan:)IndependentBackgroundMethodAsync可能需要很长时间才能执行。据我所知,Wait会一直等到IndependentBackgroundMethodAsync完成其执行:因此,如果最初的fastExecute需要1ms,而IndependentBackgroundMethodAsync总共需要100m,那么Wait将导致fastExecute在100.001I期间运行,我不关心结果。我只是希望它被执行好,那么一旦任务被安排好,如果你的服务没有同时崩溃,它就会被执行。因此,您的第二个示例应该可以很好地工作,我担心它将在20年后执行:)。可能有问题的场景fastExecute在fastExecute之后开始执行IndependentBackgroundMethodAsync,并且在previus未完成时也开始执行IndependentBackgroundMethodAsync==>到多个IndependentBackgroundMethodAsync是queuedUse,为您的任务使用CancellationToken,以确保它不会超过您的执行时间限制。您可以将任务配置为在异常持续时间超过限制时引发异常
fastExecute()
{
Task task = IndependentBackgroundMethodAsync();
task.ContinueWith(result => // handle result);
//fast code
}