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