让我们有这样的代码( 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 ?我错过了什么吗?
答案 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