Task.Run和await可以在受约束的执行区域中使用吗?

时间:2018-04-26 14:04:19

标签: c# reliability constrained-execution-reg

可以在受约束的执行区域中运行的代码可能不是

  
      
  • 使用显式分配
  •   
  • 使用拳击
  •   
  • 获得锁定
  •   
  • 虚拟地调用毫无准备的方法
  •   
  • 使用弱或不存在的可靠性合同调用方法。
  •   

(取自MSDN,强调我的。)

我想在约束执行中执行的代码是

public interface IFoo
{
    [ReliabilityContract(Consistency.MayCorruptAppDomain, Cer.MayFail)]
    void DoStuff();
}

public class C 
{
    [ReliabilityContract(Consistency.MayCorruptAppDomain, Cer.MayFail)]
    public async void Execute(IFoo foo)
    {
        RuntimeHelpers.PrepareConstrainedRegions();
        try { }
        finally
        {
            await Task.Run(() => foo.DoStuff());
        }
    }
}

inspected the IL生成了相关代码中的任何callvirtnewobjbox指令,因此我认为我应该是安全的。

我现在的问题是:

  • 由于Task.Run没有定义ReliabilityContract,这是否意味着代码无法在受约束的执行区域中执行?
  • Task.Runawait是否会以某种方式创建新对象(因此使用显式分配)或获取锁定?
  • 可以在约束执行区域中使用await吗?

0 个答案:

没有答案