EndInvoke() 是可选的,是可选的,还是绝对不是可选的?

Is EndInvoke() optional, sort-of optional, or definitely not optional?(EndInvoke() 是可选的,是可选的,还是绝对不是可选的?)
本文介绍了EndInvoke() 是可选的,是可选的,还是绝对不是可选的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我读过关于是否每个 BeginInvoke() 都必须与 EndInvoke() 匹配的相互矛盾的意见.是否存在与不调用 EndInvoke() 相关的任何泄漏或其他问题?

I've read conflicting opinions as to whether every BeginInvoke() has to be matched by an EndInvoke(). Are there any leaks or other problems associated with NOT calling EndInvoke()?

推荐答案

Delegate.EndInvoke 被记录为 你应该调用它(即必要 - 否则会发生泄漏) - 来自 msdn:

Delegate.EndInvoke is documented as a thou shalt call this (i.e. necessary - else leaks happen) - from msdn:

重要提示

无论您使用哪种技术,总是调用 EndInvoke 来完成你的异步调用.

No matter which technique you use, always call EndInvoke to complete your asynchronous call.

Control.EndInvoke 可以忽略即发即弃方法 - 来自 msdn:

Control.EndInvoke is OK to ignore for fire-and-forget methods - from msdn:

您可以调用 EndInvoke 来检索从委托返回值,如果必要,但这不是必需的.

You can call EndInvoke to retrieve the return value from the delegate, if neccesary, but this is not required.

但是 - 如果您正在使用 Delegate.BeginInvoke 并且不想要结果,请考虑改用 ThreadPool.QueueUserWorkItem - 它会让生活变得更轻松,并避免 IAsyncResult 等的痛苦.

However - if you are using Delegate.BeginInvoke and don't want the result, consider using ThreadPool.QueueUserWorkItem instead - it'll make life a lot easier, and avoid the pain of IAsyncResult etc.

这篇关于EndInvoke() 是可选的,是可选的,还是绝对不是可选的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

DispatcherQueue null when trying to update Ui property in ViewModel(尝试更新ViewModel中的Ui属性时DispatcherQueue为空)
Drawing over all windows on multiple monitors(在多个监视器上绘制所有窗口)
Programmatically show the desktop(以编程方式显示桌面)
c# Generic Setlt;Tgt; implementation to access objects by type(按类型访问对象的C#泛型集实现)
InvalidOperationException When using Context Injection in ASP.Net Core(在ASP.NET核心中使用上下文注入时发生InvalidOperationException)
LINQ many-to-many relationship, how to write a correct WHERE clause?(LINQ多对多关系,如何写一个正确的WHERE子句?)