草庐IT

async和await

全部标签

c# - 如何使用 await 在自定义 TaskScheduler 上运行任务?

我有一些方法返回Task我可以在上面await随意。我想在自定义TaskScheduler上执行这些任务而不是默认的。vartask=GetTaskAsync();awaittask;我知道我可以创建一个新的TaskFactory(newCustomScheduler())并做一个StartNew()从它,但是StartNew()采取行动并创建Task,我已经有了Task(由TaskCompletionSource返回幕后)如何指定我自己的TaskScheduler对于await? 最佳答案 我认为您真正想要的是执行Task.Run

c# - 使用 async/await 是否会创建一个新线程?

我是TPL的新手我想知道:C#5.0新增的异步编程支持(通过新的async和await关键字)与线程的创建有何关系?具体来说,async/await的使用是否会在每次使用时创建一个新线程?如果有许多使用async/await的嵌套方法,是否为每个方法创建一个新线程? 最佳答案 简而言之否来自AsynchronousProgrammingwithAsyncandAwait:ThreadsTheasyncandawaitkeywordsdon'tcauseadditionalthreadstobecreated.Asyncmethods

c# - "async Task then await Task"与 "Task then return task"

这个问题在这里已经有了答案:Whyuseasyncandreturnawait,whenyoucanreturnTaskdirectly?(8个答案)关闭6年前。社区在10个月前审查了是否重新打开此问题,然后将其关闭:原始关闭原因未解决快速提问..为了对异步编程和await有一些坚实的基础理解,我想知道这两个代码片段在多线程以及执行顺序和时间方面有什么区别:这个:publicTaskCloseApp(){returnTask.Run(()=>{//savedatabase//turnoffsomelights//shutdownapplication});}与此相比:publicasy

c# - await Task<T> 和 Task<T>.Result 有什么区别?

publicasyncTaskGetName(intid){TasknameTask=Task.Factory.StartNew(()=>string.Format("Namematchingid{0}=Developer",id));returnnameTask.Result;}在上面的方法返回语句中,我使用了Task.Result属性(property)。publicasyncTaskGetName(intid){TasknameTask=Task.Factory.StartNew(()=>string.Format("Namematchingid{0}=Developer",id

c# - async/await 是否适契约(Contract)时受 IO 和 CPU 限制的方法?

MSDN文档似乎指出async和await适用于IO绑定(bind)任务,而Task.Run应该用于CPU-绑定(bind)任务。我正在开发一个应用程序,该应用程序执行HTTP请求以检索HTML文档,然后对其进行解析。我有一个看起来像这样的方法:publicasyncTaskLoadPage(Uriaddress){using(varhttpResponse=awaitnewHttpClient().GetAsync(address))//IO-boundusing(varresponseContent=httpResponse.Content)using(varcontentStre

c# - 如何在 'await' 引发 EventHandler 事件

有时,事件模式用于通过或subview模型在MVVM应用程序中引发事件,以像这样松散耦合的方式将消息发送到其父View模型。父View模型searchWidgetViewModel.SearchRequest+=(s,e)=>{SearchOrders(searchWidgitViewModel.SearchCriteria);};SearchWidgetViewModelpubliceventEventHandlerSearchRequest;SearchCommand=newRelayCommand(()=>{IsSearching=true;if(SearchRequest!=n

c# - .Net 4.5中Async/Await的简单解释

异步任务(Async/Await)在.Net4.5中如何工作?一些示例代码:privateasyncTaskTestFunction(){varx=awaitDoesSomethingExists();vary=awaitDoesSomethingElseExists();returny;}第二个await语句是立即执行还是在第一个await返回后执行? 最佳答案 await暂停方法直到操作完成。所以第二个await会在第一个await返回后执行。有关详细信息,请参阅我的async/awaitintro或officialFAQ.

c# - 错误 : "Cannot use ' async' on methods without bodies". 如何强制异步子覆盖?

我在一个系统上工作,在这个系统中,多个客户端对象需要通过一个接口(interface)实现一个特定的功能,我希望该功能与延续异步运行(我希望实现是I/O绑定(bind)的并希望确保所有客户端对象尽快完成此功能)。我正在使用VisualStudioAsyncCTPRefreshforSP1,使用C#“5.0”。在我的抽象类的子对象中强制执行异步行为的推荐做法是什么(见下文)?我不能(显然)使用虚拟方法方法强制使用“异步”方法。我只能要求“任务”返回类型。这是否意味着我根本不应该尝试在子对象中要求异步行为?在那种情况下,返回类型应该只是“void”吗?公共(public)接口(interf

c# - await Task.Delay() 与 Task.Delay().Wait()

在C#中,我有以下两个简单示例:[Test]publicvoidTestWait(){vart=Task.Factory.StartNew(()=>{Console.WriteLine("Start");Task.Delay(5000).Wait();Console.WriteLine("Done");});t.Wait();Console.WriteLine("Alldone");}[Test]publicvoidTestAwait(){vart=Task.Factory.StartNew(async()=>{Console.WriteLine("Start");awaitTask.

c# - 为什么添加 Microsoft.Bcl.Async 包后,app.config 文件中会添加一个 "bindingRedirect"?

我想知道为什么nuget在安装Microsoft.Bcl.Async之后将以下代码添加到我的应用程序app.config文件中:如果我从配置中删除这个XML元素,应用程序将无法正常运行。据我所知,我们可以使用bindingRedirect让应用程序加载新版本或旧版本的程序集,以防我们在编译EXE时使用的版本消失。但是,我使用的版本正是2.5.19.0,那我为什么需要重定向?为什么我需要这个bindingRedirect? 最佳答案 程序集Microsoft.Threading.Tasks和Microsoft.Threading.Ta