首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IAsyncResult

IAsyncResult
EN

Stack Overflow用户
提问于 2009-03-27 04:40:15
回答 3查看 2.9K关注 0票数 5

为什么IAsyncResult要求我保留对BeginInvoked的代表的引用?

我希望能够写出这样的东西:

代码语言:javascript
复制
new GenericDelegate(DoSomething).BeginInvoke(DoSomethingComplete);

void DoSomethingComplete(IAsyncResult ar)
{
    ar.EndInvoke();
}
EN

回答 3

Stack Overflow用户

发布于 2009-03-27 07:20:37

我发现整个开始/结束模式不必要地复杂-所以我使用had a look at wrapping it up (与F#使用的非常相似)。结果:不再需要保留委托(等)。

票数 2
EN

Stack Overflow用户

发布于 2009-03-27 04:48:26

IAsyncResult是一个非常...过度使用的接口。要在如此多的场景中成为可用的接口,它只能真正具有适用于所有使用它的场景的属性和字段。否则,API将很难提供完全不适合其特定需求的参数。

只有在少数情况下,才会为委托创建IAsyncResult。其他场景,如Control.BeginInvoke,不是以委托开始的,如果接口属性存在,也不能提供委托。

IAsyncResult在这里采用了极简主义的方法,只有它的所有用途都能提供的属性。

票数 1
EN

Stack Overflow用户

发布于 2009-03-27 07:18:13

尝试将委托作为异步状态参数传递,例如,

代码语言:javascript
复制
class Program {
    static void Main(string[] args) {
        Action d = delegate {
            Console.WriteLine("From the delegate");
        };
        var e = new ManualResetEvent(false);
        d.BeginInvoke(r => {
            ((Action)r.AsyncState).EndInvoke(r);
            e.Set();
        }, d);
        e.WaitOne();
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/688581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档