gpt4 book ai didi

.net - 基于事件的异步模式有哪些替代方案?

转载 作者:行者123 更新时间:2023-12-04 20:19:26 24 4
gpt4 key购买 nike

我正在考虑实现一个可以同时运行多个操作的 API。 MS 推荐了基于事件的异步模式:

// 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 方法的 token 。我想了解更多有关 .Net 或其他可以适当翻译的语言中常用的其他异步模式的信息

最佳答案

看看Reactive Extensions ,你可以返回一个可以被客户端订阅的 Observable。

订阅返回一个实现 IDisposable 的对象,这是取消订阅的机制,只需处理该对象。

例如:

IObservable<T> o = Method1Async(params);

var observer = o.Subscribe(r => {/*do stuff with the result*/},
ex => {/* do stuff with the exception */);

// decide to cancel
observer.Dispose();

您可以使用 nuget 安装 Reactive Extensions 位,只需“install-package rx-main”

关于.net - 基于事件的异步模式有哪些替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8410292/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com