我正在考虑实现一个可以同时运行多个操作的API。微软推荐使用基于事件的异步模式:
// Asynchronous methods.
public void Method1Async(string param, object userState);
public event Method1CompletedEventHandler Method1Completed;
public void CancelAsync(object userState);
public bool IsBusy { get; }
然而,这种方法似乎有些笨拙 - 它要求客户端筛选出不适用于他们的回复,并在完成后断开事件处理程序等。我的想法是更像这样:
AsyncOperation1(string parm, Action<T> callback)
每个客户端都会直接收到自己的结果。我在考虑如何优雅地支持取消操作。我猜测显而易见的做法是让AsyncOperation1返回一些可以传递到CancelAsync方法中的令牌。我想了解更多在.Net或其他语言中常用的异步模式,以便进行适当的转换。