为什么Elvis(?。)运营商不能使用async-await?

时间:2016-11-05 08:26:43

标签: c# windows async-await uwp c#-6.0

让我们有这样的代码( App.xaml.xs 的片段):

public class MethodClass
{
    public async Task Job()
    {
        Debug.WriteLine("Doing some sob");
        await Task.Delay(1);
    }
}

public MethodClass MyClass = null;

protected async override void OnLaunched(LaunchActivatedEventArgs e)
{
    await MyClass?.Job(); // here goes NullreferenceException
    MyClass?.Job(); // works fine - does nothing

为什么Elvis运营商不能使用 async-await ?我错过了什么吗?

1 个答案:

答案 0 :(得分:11)

for i in "${myArray[@]}" do cat > "pbs.script.$i" << EOF #!/bin/bash kallisto quant -t 16 -b 100 \ -o "/home/jfertaj/data/results_kallisto/output_bootstrap_$i" \ "$RawData/${i}_1.fastq.gz" \ "$RawData/${i}_2.fastq.gz" EOF done exit 0 的翻译方式是,首先,在等待的对象上调用await(在您的情况下,GetAwaiter())。然后它会做一些其他复杂的事情,但这些与此无关:

Task

编译为:

await MyClass?.Job();

由于var awaiter = MyClass?.Job().GetAwaiter(); // more code 是一种实例方法,并且您使用Task.GetAwaiter() null进行调用,因此您获得了Task

好奇心,NullReferenceException await可以等待,只要其null是接受GetAwaiter()的扩展方法:

null