繁体   English   中英

使用委托异步/等待

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM