当前位置: 首页 > 编程语言 > C#

AwaitAsyncMethod()和WaitWaitWaitTask.Factory.StartNew(AsyncMethod)分享

时间:2023-04-10 18:07:33 C#

WaitAsyncMethod()和WaitWaitWaitTask.Factory.StartNew(AsyncMethod)给定如下方法:publicasyncTaskDoSomethingAsync(){//做一些工作awaitOpenSomeFileAsync();返回新的对象();有区别吗?publicasyncvoidSomeEventHandler(EventArgsargs){//用myObject做一些事情}and:publicasyncvoidSomeEventHandler(EventArgsargs){varmyObject=awaitDoSomethingAsync();//dosomethingwithmyObject}我认为DoSomethingAsync的“做某事”部分会在第一种情况下立即发生在新任务中,但老实说我不完全理解Task、async和await是如何工作的,而且我'我很确定我只是把自己的事情复杂化了。编辑:这个问题来自于查看这个Metro示例:http://code.msdn.microsoft.com/windowsapps/Sharing-Content-Target-App-e2689782特别是在MainPage.xaml.cs中,他们有:varunused=Task。Factory.StartNew(async()=>{//一些工作...});//unusedisoftypeTask我试图在不使用匿名异步函数的情况下对其进行返工,我开始怀疑,为什么不编写一个异步方法并等待它,而不是调用StartNew并移交一个异步函数?大多数时候,添加另一个Task是没有用的,但在某些情况下,它可以。不同之处在于,如果您直接在UI线程上执行DoSomethingAsync()(或类似DoSomethingAsync()的东西),它的第一部分(//做一些工作)也会在UI线程上执行,因此该方法的任何延续也将执行(除非他们使用ConfigureAwait())。另一方面,如果您启动另一个任务,则DoSomethingAsync()的第一部分和任何后续部分将在ThreadPool上执行。如果DoSomethingAsync()编写正确,添加另一个ATask不会给您带来任何优势(并且会给您带来更多开销的劣势),但我可以想象某些情况会有所不同。另外,不要使用Task.Factory.StartNew()和这两个await,而是awaitTask.Run(DoSomethingAsync);是的,有一点不同:在第一种形式中,你有一个额外的任务级别,这完全没有用。第一种形式基本上等同于:Task>task1=Task.Factory.StartNew>(DoSomethingAsync);任务>任务2=等待任务1;varmyObject=awaittask2;所以它没有意义:您创建的任务只是...创建另一个任务。以上就是C#学习教程分享的全部内容:等待AsyncMethod()和等待Task.Factory.StartNew(AsyncMethod)。网络收藏不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: