异步方法的事件订阅
Event subscription on async method
我想以两种方式启动 LoadDataAsync
。首先通过 FormLoad()
中的订阅事件和经典方法 ManualLoad()
.
但我做不到。
我无法订阅任务 return。使用 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);
}
由于事件不支持 async Task
,您需要通过 "wrapping" 解决该问题,例如:
this.ProductSelectionChanged += async (s, e) => await LoadDataAsync();
我在这里创建了一个匿名的 method/handler,签名为 async void
,它除了 await
任务返回 LoadDataAsync
方法(你应该添加ConfigureAwait(false)
,具体取决于您的具体用例)。
我想以两种方式启动 LoadDataAsync
。首先通过 FormLoad()
中的订阅事件和经典方法 ManualLoad()
.
但我做不到。
我无法订阅任务 return。使用 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);
}
由于事件不支持 async Task
,您需要通过 "wrapping" 解决该问题,例如:
this.ProductSelectionChanged += async (s, e) => await LoadDataAsync();
我在这里创建了一个匿名的 method/handler,签名为 async void
,它除了 await
任务返回 LoadDataAsync
方法(你应该添加ConfigureAwait(false)
,具体取决于您的具体用例)。