为了账号安全,请及时绑定邮箱和手机立即绑定

在C#中执行fire and forget方法的最简单方法是什么?

在C#中执行fire and forget方法的最简单方法是什么?

慕桂英4014372 2019-08-15 15:27:05
在C#中执行fire and forget方法的最简单方法是什么?我在WCF中看到他们有[OperationContract(IsOneWay = true)]属性。但是WCF似乎有点缓慢而且很重要,只是为了创建一个非阻塞功能。理想情况下会出现类似静态无效的阻塞MethodFoo(){},但我认为不存在。在C#中创建非阻塞方法调用的最快方法是什么?例如class Foo{     static void Main()     {         FireAway(); //No callback, just go away         Console.WriteLine("Happens immediately");     }     static void FireAway()     {         System.Threading.Thread.Sleep(5000);         Console.WriteLine("5 seconds later");     }}注意:阅读此内容的每个人都应该考虑他们是否真的想要完成这个方法。(参见#2最佳答案)如果方法必须完成,那么在某些地方,比如ASP.NET应用程序,你需要做一些事情来阻止并保持线程活着。否则,这可能会导致“忘记但永远不会实际执行”,在这种情况下,当然,根本不编写任何代码会更简单。(很好地描述了它在ASP.NET中的工作原理)
查看完整描述

3 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

对于C#4.0及更新版本,让我觉得Ade Miller现在给出了最好的答案:在c#4.0中执行fire and forget方法的最简单方法

Task.Factory.StartNew(() => FireAway());

甚至...

Task.Factory.StartNew(FireAway);

要么...

new Task(FireAway).Start();

哪里FireAway

public static void FireAway(){
    // Blah...}

因此,凭借类和方法名称的简洁性,这取决于您选择的那个,使得线程池版本超过6到19个字符:)

ThreadPool.QueueUserWorkItem(o => FireAway());


查看完整回答
反对 回复 2019-08-15
  • 3 回答
  • 0 关注
  • 828 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信