Nat*_*ook 3 c# mono async-await c#-6.0
在Jon Skeet的C#6帖子中,他用C#6命名了Clean Event Handlers Invocation,他展示了你现在如何写作
public void OnFoo()
{
Foo?.Invoke(this, EventArgs.Empty);
}
Run Code Online (Sandbox Code Playgroud)
代替
public void OnFoo()
{
EventHandler handler = Foo;
if (handler != null)
{
handler(this, EventArgs.Empty);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我们谈论一个等待的方法,有没有办法做这样的单线程?如果我试试
await Foo?.Invoke();
Run Code Online (Sandbox Code Playgroud)
我得到以下编译错误:
所述awaiter类型
System.Runtime.CompilerServices.TaskAwaiter?必须有合适的IsCompleted和GetResult构件(CS4011).
注意:我使用的是Mono(Xamarin Studio for OSX v5.9.5),因此编译器结果可能与使用Visual Studio的结果不同.
@ i3arnon有一个很好的解决方案,但这是你可以做到的另一种不需要添加字段或属性的方法.
await (Foo?.Invoke() ?? Task.CompletedTask);
Run Code Online (Sandbox Code Playgroud)
或者如果 Task<T>
var i = await (Foo?.Invoke() ?? Task.FromResult<T>(default(T)))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
348 次 |
| 最近记录: |