活动对象模式的.NET 实现

发布于 2024-10-16 14:44:11 字数 293 浏览 0 评论 0原文

我正在寻找活动对象模式的实现,但到目前为止还没有太多。这就是我想到的:

需要更多的参与。最好是 .NET 版本 <= 3.5。

I'm looking for implementations of the active object pattern, but haven't for much so far. This is what I came up with:

Need something a little bit more involved. Preferably for .NET Version <= 3.5.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

半枫 2024-10-23 14:44:11

使用 System.Threading.Tasks.Task InvokeAsync 的简单实现

class ActiveObject : IDisposable
{
    private Task _lastTask = Task.Factory.StartNew(() => { });

    public void Dispose()
    {
        if (_lastTask == null)
            return;

        _lastTask.Wait();
        _lastTask = null;
    }

    public void InvokeAsync(Action action)
    {
        if (_lastTask == null)
            throw new ObjectDisposedException(GetType().FullName);

        _lastTask = _lastTask.ContinueWith(t => action());
    }
}

不是线程安全的,如果需要,请使用 lock (_lastTask) lastTask = ...;

The simple implementation that uses System.Threading.Tasks.Task

class ActiveObject : IDisposable
{
    private Task _lastTask = Task.Factory.StartNew(() => { });

    public void Dispose()
    {
        if (_lastTask == null)
            return;

        _lastTask.Wait();
        _lastTask = null;
    }

    public void InvokeAsync(Action action)
    {
        if (_lastTask == null)
            throw new ObjectDisposedException(GetType().FullName);

        _lastTask = _lastTask.ContinueWith(t => action());
    }
}

InvokeAsync isn't thread-safe, use lock (_lastTask) lastTask = ...; if you need it.

呆° 2024-10-23 14:44:11

我没有看过代码,但这似乎是活动对象模式的实现。

http://www.codeproject.com/KB/architecture/LongRunningActiveObject.aspx

I haven't looked at the code, but this seems to be an implementation of the active object pattern.

http://www.codeproject.com/KB/architecture/LongRunningActiveObject.aspx

鹿童谣 2024-10-23 14:44:11

添加到 Anton Tykhyy 的答案中,有一个用于 .NET 3.5 的 System.Threading.Tasks.Task 版本作为 反应式扩展。请注意,此版本没有 Microsoft 的官方支持。

Adding to Anton Tykhyy's answer, there is a version of System.Threading.Tasks.Task for .NET 3.5 available as a part of Reactive Extensions. Note that this version does not have official support from Microsoft.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文