Sco*_*rod 0 c# events async-await
我想订阅一个事件的异步方法。
然而,编译器不会让我这样做。
我怎样才能做到这一点?
例子:
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);
}
Run Code Online (Sandbox Code Playgroud)
您的LoadCandidates方法是否仅用作事件处理程序(如您发布的代码所示)?
如果是这样,您应该将其更改为 isasync void而不是返回Task. async void这是事件处理程序的常见签名,也是可以接受/推荐使用方法的极少数情况之一。
如果您要在其他地方使用它并需要它返回任务,请async void围绕它编写一个包装器方法,并使用此包装器作为事件处理程序。
public async void LoadCandidatesAsync()
{
await LoadCandidates();
}
Run Code Online (Sandbox Code Playgroud)
事件处理程序不应返回任何内容。如果调用者有 100 个客户端侦听该事件,他将只能获得其中一个处理程序的返回值。如果调用者想要从处理程序中获取某些内容,那么它应该向它们发送一个可变EventArgs实例。
以下是关于为什么事件处理程序应该返回的更完整的解释void:/sf/answers/232779781/