异步方法事件订阅
问题描述:
我想用2种方式启动LoadDataAsync
。首先通过FormLoad()
中的一个事件和一个经典方法ManualLoad()
。异步方法事件订阅
但我不能让它工作。
我无法订阅任务返回。与void
它的工作原理,但void
不能在ManualLoad()
方法await
。两种方式如何工作?
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
你neeed通过“包装”来解决它,比如:
this.ProductSelectionChanged += async (s, e) => await LoadDataAsync();
在这里,我创建了一个匿名方法/处理器使用的async void
签名这什么都不做否则,await
任务返回LoadDataAsync
-method(可能应该添加ConfigureAwait(false)
,具体取决于您的具体用例)。
+0
非常感谢。只是为了我的示例是完美的答案是this.ProductSelectionChanged + = async(s)=>等待LoadDataAsync(s); – Julian50 2015-03-13 11:24:36
可能重复的[C#中的异步事件](http://stackoverflow.com/questions/27761852/asynchronous-events-in-c-sharp) – 2017-01-27 13:35:09