异步方法上的事件订阅

我想以两种方式启动LoadDataAsync 。 首先是使用ManualLoad()和经典方法ManualLoad()

但我不能让它发挥作用。

我无法订阅任务返回。 使用void它可以正常工作,但是无法在ManualLoad()方法中await void 。 两种方式如何运作?

  public delegate void ProductDelegate(long? iShopProductId); public event ProductDelegate ProductSelectionChanged = delegate { }; public async Task LoadDataAsync(long? iProductId) { //await action.... } //first way public void FormLoad() { this.ProductSelectionChanged += LoadDataAsync //UNDERLINED ERROR; } //second way public async Task ManualLoad() { await LoadDataAsync(2); } 

由于事件不支持async Task您需要通过“包装”来解决它,例如:

 this.ProductSelectionChanged += async (s, e) => await LoadDataAsync(); 

在这里,我创建了一个匿名方法/处理程序,其签名为async void ,除了await任务返回的LoadDataAsync -method之外没有其他任何东西(可能应该添加ConfigureAwait(false) ,具体取决于您的具体用例)。