结束 BeginInvoke 的正确方法?

发布于 2024-07-11 06:59:11 字数 588 浏览 4 评论 0原文

我最近阅读了此帖子在 MSDN 上。 因此,我正在考虑使用 lambda 表达式作为调用 EndInvoke 的一种方式,以确保一切都良好且整洁。

哪个更正确?

示例 1:

Action<int> method = DoSomething;

method.BeginInvoke(5, (a)=>{method.EndInvoke(a);}, null);

示例 2:

Action<int> method = DoSomething;

method.BeginInvoke(5, (a)=>
  {
      Action<int> m = a.AsyncState as Action<int>;
      m.EndInvoke(a);
  }, method);

I recently read this thread on MSDN. So I was thinking of using a lambda expression as a way of calling EndInvoke just as a way to make sure everything is nice and tidy.

Which would be more correct?

Example 1:

Action<int> method = DoSomething;

method.BeginInvoke(5, (a)=>{method.EndInvoke(a);}, null);

Example 2:

Action<int> method = DoSomething;

method.BeginInvoke(5, (a)=>
  {
      Action<int> m = a.AsyncState as Action<int>;
      m.EndInvoke(a);
  }, method);

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

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

发布评论

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

评论(3

顾挽 2024-07-18 06:59:11

您的第二个示例稍微高效一些,因为不必在闭包中捕获“方法”委托实例。 我怀疑你不会注意到。

Your 2nd example is slightly more efficient because the "method" delegate instance doesn't have to be captured in the closure. I doubt you'd ever notice.

望她远 2024-07-18 06:59:11

我不知道这在 09 年 1 月是否可行,但现在你可以这样写:

method.BeginInvoke(5, method.EndInvoke, null);

I don't know if this was possible way back in Jan '09, but certainly now you can just write this:

method.BeginInvoke(5, method.EndInvoke, null);
逆流 2024-07-18 06:59:11

您可能想阅读此内容 Haacked 博客上的帖子。
还没有机会测试它,但要点在最后一行之一:

ThreadPool.QueueUserWorkItem(callback => im.Send(to, from, subject, body));

You might want to read this thread on Haacked's blog.
Haven't had a chance to test it, but the gist is in one of the last lines:

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