我想以两种方式发布LoadDataAsync
。首先是FormLoad()
中的订阅和经典方法ManualLoad()
的事件。
但我无法使其发挥作用。
我无法订阅任务返回。使用void
它可行,但void
方法中的await
无法ManualLoad()
。如何使两种方式都有效?
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);
}
答案 0 :(得分:5)
由于事件不支持async Task
,您需要通过" wrap"来解决这个问题。它,例如:
this.ProductSelectionChanged += async (s, e) => await LoadDataAsync();
在这里,我创建了一个匿名方法/处理程序,其签名为async void
,除了await
任务返回LoadDataAsync
方法之外什么都不做(可能你应该添加ConfigureAwait(false)
},具体取决于您的具体用例)。