[英]Async / Await using delegates
我想为事件订阅一个异步方法。
但是,编译器不会让我。
我怎样才能做到这一点?
例:
class SearchBase
{
public delegate void ReuestingCollectionHandler();
public event ReuestingCollectionHandler RequestingCollection = null;
}
.
.
.
SearchBase.RequestingCollection += LoadCandidates;
public async Task LoadCandidates()
{
var queryText = string.Empty;
Candidates = await CandidatesManager.GetCandidates(Profile.Instance.RecruiterId);
}
您的LoadCandidates
方法是否将仅用作事件处理程序(如您发布的代码所示)?
如果是这样,则应将其更改为async void
而不是返回Task
。 这是事件处理程序的常用签名,并且是接受/推荐使用async void
方法的极少数情况之一。
如果要在其他地方使用它并需要它来返回任务,则在它周围编写一个async void
包装器方法,然后将此包装器用作事件处理程序。
public async void LoadCandidatesAsync()
{
await LoadCandidates();
}
事件处理程序不应返回任何东西。 如果一个调用方有100个客户端在监听该事件,则他将仅获得处理程序之一的返回值。 如果调用者希望从处理程序中获取某些东西,则应向它们发送一个可变的EventArgs
实例。
这是有关事件处理程序为何应返回void
的更完整的说明: https : //stackoverflow.com/a/3325425/857807
您的委托需要匹配,您无法分配将Task返回到返回类型为void的委托的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.