草庐IT

dispatch-async

全部标签

c# - 使用 async-await 可以给您带来任何性能优势吗?

每当我读到有关async-await的内容时,用例示例总是其中有一个您不想要的UI卡住。要么所有的编程书籍/教程都相同,要么UI阻塞是我作为开发人员应该了解的async-await的唯一情况。是否有任何示例可以说明如何使用async-await在算法中获得性能优势?让我们来回答任何经典的编程面试问题:在二叉树中找到最近的共同祖先给定a[0],a[1],...,a[n-1]表示一个基数的数字-10数,找到下一个使用相同数字的最大数找到两个排序数组的中位数(即合并它们时的中位数)给定一个数字数组1,2,...,n缺少一个数字,找到缺失的数字找出数组中最大的2个数有什么方法可以让那些使用as

c# "task method"也可以是 "async"方法吗?

我正在尝试掌握新的异步CTP内容,我可能在这里感到困惑......我可以有这个“任务方法”,没有问题:publicstaticTaskLongTaskAAsync(){returnTask.Run(()=>{return("AAA");});}但是如果我需要任务执行另一个任务,我可以将其标记为“async”并使用“await”吗?我试过这个:publicasyncstaticTaskLongTaskAAsync(){awaitTask.Delay(2000);returnTask.Run(()=>{return("AAA");});}但随后莫名其妙地得到了这个编译器错误:因为这是一个异

c# - 使用 Async 和 Await 转换普通的 Http Post Web 请求

我如何使用Async/Await模式转换我的传统HttpWebRequest“POST”调用,在此附上我当前的代码,任何人请帮助我使用WindowsPhone8的Async/Await模式转换此代码。publicvoidGetEnvironmentVariables(ActiongetResultCallback,ActiongetErrorCallback){CredentialsCallback=getResultCallback;ErrorCallback=getErrorCallback;varuri=newUri(BaseUri);varrequest=(HttpWebReq

c# - await/async 与线程有何不同?

我正在尝试熟悉c#的新await/async关键字,但我发现有几个方面我不太理解。让我们从竞争条件开始:Streams=......for(inti=0;i这会一直按预期工作吗(例如,写入文件12345.....而不是13254或其他东西)?第二件事是异步函数如果不包含await运算符则同步执行。而且,根据微软文档,异步函数总是在调用者线程中执行(与BeginInvoke相比)。这让我想到接下来的3个问题:异步函数在释放给调用函数之前执行了多少?asyncvoidMyAsyncFunction(){Operation1();Operation2();Operation3();....S

c# - 当我必须使用 await 时,为什么要使用 async?

我已经在这个问题上停留了一段时间,并没有真正找到任何有用的解释来解释为什么会这样。如果我有一个async方法,例如:publicasyncTaskMyMethod(){//Somelogicreturntrue;}publicasyncvoidMyMethod2(){varstatus=MyMethod();//Visualstudiogreenlinesthisandrecommendsusingawait}如果我在这里使用await,异步方法有什么意义呢?VS告诉我调用await不会使async无用吗?这不会破坏在不等待任务完成的情况下将任务卸载到线程的目的吗?

c# - async/await 关键字在 .net 4.0 中不可用

我想在C#4.0中使用async/await并且我已经安装了以下包:http://www.nuget.org/packages/Microsoft.Bcl.Async/问题是我没有可用的async/await关键字。我正在使用带有SP1的VS2010。谢谢。 最佳答案 您不会得到比JonSkeet's更好的答案.唯一支持的方法是将VS2012与Microsoft.Bcl.Async一起使用。VS2010很难使用async/await。有一个旧的AsyncCTP包(其中有许多错误从未被修复)充当VS2010的“附加组件”/“部分替换”

c# - 如何正确使用Microsoft.Bcl.Async?

我使用Microsoft.Bcl.Asyncpackage在一个项目中,并且该项目被另一个不使用异步功能的项目引用。现在我在编译解决方案(或仅编译第二个项目)时收到此错误警告:Theprimaryreference"XYZ.dll"couldnotberesolvedbecauseithasanindirectdependencyontheframeworkassembly"System.Runtime,Version=1.5.11.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a"whichcouldnotberesolvedinth

c# - async 和 await 关键字不会导致创建额外的线程?

我很困惑。一个或多个Task如何在单个线程上并行运行?我对并行的理解显然是错误的。我无法理解MSDN的一些内容:Theasyncandawaitkeywordsdon'tcauseadditionalthreadstobecreated.Asyncmethodsdon'trequiremultithreadingbecauseanasyncmethoddoesn'trunonitsownthread.Themethodrunsonthecurrentsynchronizationcontextandusestimeonthethreadonlywhenthemethodisactive

c# - Dispatcher Invoke(...) 与 BeginInvoke(...) 混淆

我很困惑,为什么我不能通过在Count()方法中在我的Dispatcher上使用“BeginInvoke”使这个测试计数器应用程序与2个(或更多)同时运行的计数器文本框一起工作。您可以通过将BeginInvoke替换为Invoke来解决该问题。但这并不能解决我的困惑。这是我正在谈论的示例代码:publicclassCounterTextBox:TextBox{privateint_number;publicvoidStart(){(newAction(Count)).BeginInvoke(null,null);}privatevoidCount(){while(true){if(_n

c# - 递归和 await/async 关键字

我对await关键字的工作原理不太了解,我想扩展一下我对它的理解。仍然让我头晕的问题是递归的使用。这是一个例子:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespaceTestingAwaitOverflow{classProgram{staticvoidMain(string[]args){vartask=TestAsync(0);System.Threading.Thread.Sleep(100000);}st