簡體   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