使用异步vs“旧异步委托”进行即发即弃
我试图用一种新语法替换我的旧的“即发即弃”调用,希望更简单,它似乎在逃避我。这是一个例子
class Program{ static void DoIt(string entry) { Console.WriteLine("Message: " + entry); } static async void DoIt2(string entry) { await Task.Yield(); Console.WriteLine("Message2: " + entry); } static void Main(string[] args) { // old way Action<string> async = DoIt; async.BeginInvoke("Test", ar => { async.EndInvoke(ar); ar.AsyncWaitHandle.Close(); }, null); Console.WriteLine("old-way main thread invoker finished"); // new way DoIt2("Test2"); Console.WriteLine("new-way main thread invoker finished"); Console.ReadLine(); }}
两种方法都做同样的事情,但是我似乎已经获得了(没有必要EndInvoke
和关闭处理,这仍然有点争议)我正在以新的方式失去等待a Task.Yield()
,这实际上带来了一个新的问题必须重写所有现有的异步F&F方法只是为了添加一个单行。在性能/清理方面是否有一些无形的收获?
如果我无法修改背景方法,我将如何应用异步?在我看来,没有直接的方法,我将不得不创建一个等待Task.Run()的包装器异步方法?
编辑:我现在看到我可能会错过一个真正的问题。问题是:给定一个同步方法A(),如何使用async
/ await
以一种即发即忘的方式异步调用它,而不会得到比“旧方式”更复杂的解决方案
肥皂起泡泡
墨色风雨
相关分类