是否可以确保ContinueWith执行? [英] Is ContinueWith guaranteed to execute?
本文介绍了是否可以确保ContinueWith执行?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一些代码充当了轻量,无阻塞的关键部分.我希望无论 Task.Run
子句中的 _func
和 cancellationToken
发生什么情况,都可以保证继续运行在其 finally
块中的 Exit
语句将始终执行.
I've got a bit of code that is acting as a light weight, non-blocking, critical section. I am hoping that no matter what happens with _func
and cancellationToken
in the Task.Run
clause, that the continuation is guaranteed to run such that the Exit
statement in its finally
block will always execute.
可以安全地假设下面的finally块(在此过程中没有灾难性的失败)将以与
Is it safe to assume that the finally block below, short of catastrophic failure in the process, will be executed with roughly the same guarantees that finally normal operates with?
if (Enter())
{
Task.Run<T>(_func, cancellationToken)
.ContinueWith((antecedent) =>
{
try
{
antecedent.Wait(cancellationToken);
Interlocked.Exchange<T>(ref _result, antecedent.Result);
}
catch (AggregateException e)
{
Interlocked.Exchange(ref _exceptions, e);
}
catch (OperationCanceledException)
{
ResetState();
}
catch (Exception e)
{
Interlocked.Exchange(ref _exceptions, new AggregateException(e));
}
finally
{
Exit();
}
})
}
推荐答案
查看全文