Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有效的非阻塞执行_C#_Azure_Asynchronous_Cloud_Async Await - Fatal编程技术网

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

}