C#使用异步委托的两种方式,这里的特委托以EventHandlers为例。

public class MyView
{
	public EventHandler OnRefreshObjectExplorerClicked;

}

添加事件如下:

MyView view = new MyView();
view.OnRefreshObjectExplorerClicked += new EventHandler(async (s, e) => await RefreshObjectExplorerAsync());

或者更简单明了的写法如下:

view.OnRefreshObjectExplorerClicked += async (s, e) => await RefreshObjectExplorerAsync();

 

要点说明

  • async void 只适用于事件处理器,异常无法被外部捕获,其它场景应返回 Task。
  • 事件订阅可直接用 lambda:view.OnRefresh += async (s, e) => await RefreshAsync();
  • EventHandler 的签名返回 void,因此 lambda 中只能写 async void(属于允许的例外)。
  • 如需等待完成,改用自定义委托 Task MyHandler(...),并显式 await。