异步方法上的事件订阅
我想以两种方式启动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)
,具体取决于您的具体用例)。