![]() |
1
231
(五年后……)
正如所指出的 luisperezphd . |
![]() |
2
34
对于C 4.0及更高版本,我突然想到最好的答案现在由Ade Miller给出: Simplest way to do a fire and forget method in c# 4.0
|
![]() |
3
16
添加到
Will's answer
,如果这是一个控制台应用程序,只需将
|
![]() |
4
15
.NET 4.5:
|
![]() |
5
13
一种简单的方法是使用无参数lambda创建和启动线程:
通过在threadpool.queueuserworkitem上使用此方法,可以命名新线程,以便调试。此外,不要忘记在例程中使用广泛的错误处理,因为调试器之外的任何未经处理的异常都会导致应用程序突然崩溃:
|
![]() |
6
10
使用ASP.NET和.NET 4.5.2时,建议使用以下方法执行此操作:
使用实例:
或使用异步:
这在Azure网站上很有用。 参考文献: Using QueueBackgroundWorkItem to Schedule Background Jobs from an ASP.NET Application in .NET 4.5.2 |
![]() |
7
7
调用BeginInvoke而不捕获EndInvoke不是一个好方法。答案很简单: 调用endinvoke的原因是调用的结果(即使没有返回值)必须由.NET缓存,直到调用endinvoke为止。例如,如果被调用的代码引发异常,那么该异常将缓存在调用数据中。在调用endinvoke之前,它将保留在内存中。调用endinvoke后,可以释放内存。对于这种特殊情况,内存可能会一直保留到进程关闭,因为数据由调用代码在内部维护。我猜GC最终可能会收集到它,但我不知道GC如何知道您放弃了数据,而仅仅花了很长时间来检索它。我怀疑是的。因此可能发生内存泄漏。 有关更多信息,请访问 http://haacked.com/archive/2009/01/09/asynchronous-fire-and-forget-with-lambdas.aspx |
![]() |
8
2
最简单的.NET 2.0和更高版本的方法是使用Asynchnous编程模型(即委托上的BeginInvoke):
|
![]() |
9
1
近10年后:
我会在Fireaway中添加异常处理和日志记录 |
|
Robert King · Unity C#语法问题-转换位置 1 年前 |
![]() |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
|
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
![]() |
i_sniff_ket · 在unity之外使用unity类 2 年前 |