草庐IT

c# - C# 异步 CTP 中的 `awaiting` 线程会发生什么?

我一直在阅读新的异步await关键字,这听起来很棒,但是有一个关键问题我无法在我的任何介绍视频中找到答案到目前为止已经看过了(前阵子我也看了白皮书)。假设我在主UI线程的嵌套函数中调用了await。此时线程会发生什么情况?控制是否返回到消息循环并且UI线程可以自由处理其他输入?当等待的任务完成时,整个堆栈是否被推送到消息队列中,这样控制权将通过每个嵌套函数返回,还是这里完全发生了其他事情?其次(当我引起您的注意时),我真的不明白为什么异步方法需要用async标记。任何方法都不能异步执行吗?如果我想异步执行一个方法但它没有async关键字怎么办——有没有一种方法可以简单地做到这一点?干杯

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

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

c# - 当可以在 lambda 中使用 await 时,为什么不能在 lambda 中使用 yield?

AccordingtoEricLippert,anonymousiteratorswerenotaddedtothelanguagebecauseitwouldbeoverlycomplicatedtoimplementit.这对我来说没问题,直到他们继续实现匿名异步方法后我才感到困扰。编译器必须为异步方法做同样的事情,因为它必须为迭代器做同样的事情(将它们转换为状态机),所以我很困惑为什么匿名迭代器也不允许,而匿名异步方法是允许的。有人可以阐明这一点吗? 最佳答案 AccordingtoEricLippert,anonymousi

c# - await Task.Factory.StartNew(() => vs Task.Start; await Task;

这两种使用await的形式在功能上有什么区别吗?stringx=awaitTask.Factory.StartNew(()=>GetAnimal("feline"));TaskmyTask=newTask(()=>GetAnimal("feline"));myTask.Start();stringz=awaitmyTask;具体来说,1.中每个操作是按什么顺序调用的?是调用StartNew然后调用await,还是在1.中先调用await? 最佳答案 当您使用async和await编写代码时,您应该尽可能使用Task.Run。Task

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# - 调用 await GetFileAsync() 永远不会返回并且应用程序在 WinRT 应用程序中挂起

我试图在应用程序启动时加载和读取设置文件,大约90%的时间,awaitGetFileAsync("filename.xml");永远不会返回,因此挂起应用程序。大约四分之一的时间,如果我单步执行代码,它实际上会返回并读取文件。这是代码的一个非常简化的版本:App.xaml.cs:protectedoverridevoidOnLaunched(LaunchActivatedEventArgsargs){FileLoader.Load().Wait();//File-loaddependentstuff}文件加载器.cs:publicasyncstaticTaskLoad(){Storag

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

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

c# - 在 Razor View 中使用 await

是否可以awaitRazor.cshtmlView中的任务?默认情况下,它会提示它只能用于标记为async的方法中,所以我想知道是否在某个地方有一个隐藏的开关可以启用它? 最佳答案 在ASP.NETCore2.1中,您可以在RazorView中使用await。参见https://learn.microsoft.com/en-us/aspnet/core/mvc/views/partial?view=aspnetcore-2.1例子:@awaitHtml.PartialAsync("../Account/_LoginPartial.c

c# - 异步方法中的 Await 与 Task.Result

这个问题在这里已经有了答案:WhatisthedifferencebetweenawaitTaskandTask.Result?(2个答案)关闭7年前。执行以下操作有什么区别:asyncTaskmethod(){varr=awaitdynamodb.GetItemAsync(...)returnr.Item;}对比asyncTaskmethod(){vartask=dynamodb.GetItemAsync(...)returntask.Result.Item;}在我的例子中,出于某种原因,只有第二个有效。第一个似乎永远不会结束。