草庐IT

Async-await

全部标签

c# - 在非异步方法中使用异步

假设我只想在async中运行一个方法。所以我有一个async方法,如下所示:publicasyncTaskLoad(){Tasktask1=GetAsync(1);Tasktask2=GetAsync(2);Tasktask3=GetAsync(3);vardata1=awaittask1;//然后我试图在另一个方法中调用那个async方法作为一个任务,并希望它等到那段特定的async代码是完毕。问题是它不是。当它到达Load()中的第一个await时,它只是没有完成加载。调试器变为空白并且没有给出其他错误。是否可以从非async方法调用async方法,就像这样?我不需要此特定任务是a

c# - Observable.Where 与异步谓词

有没有一种方便的方法可以将异步函数用作可观察对象上的Where运算符的谓词?例如,如果我有一个整洁但可能长时间运行的函数定义如下:TaskRank(objectitem);是否有将其传递到Where并保持异步执行的技巧?如:myObservable.Where(asyncitem=>(awaitRank(item))>5)过去,当我需要这样做时,我会使用SelectMany并将这些结果与原始值一起投影到新类型中,然后根据那个。myObservable.SelectMany(asyncitem=>new{ShouldInclude=(awaitRank(item))>5,Item=ite

c# - 多层 C# 应用程序中的异步/等待

我在高流量场景中有一个多层C#MVC4Web应用程序,该应用程序对各种存储库使用依赖项注入(inject)。这非常有用,因为它很容易测试,并且在生产中我们可以轻松地为特定Controller配置存储库。所有Controller都继承自AsyncController,因此返回Task的操作方法或Task真正帮助我们的服务器扩展到更多用户和solveforthedreadedthreadstarvationproblem.一些存储库使用Web服务,我们绝对可以使用Async/Await来提供可伸缩性优势。在其他情况下,有些人可能会使用无法安全线程化的非托管服务,其中async/await不

c# - await DoSomethingAsync 有什么意义

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。这个问题似乎与helpcenter中定义的范围内的编程无关。.关闭7年前。Improvethisquestion我正在努力思考所有已添加到最新版本的.NET框架中的异步内容。我理解其中的一部分,但老实说,我个人认为它不会让编写异步代码变得更容易。与我们在async/await出现之前使用的更传统的方法相比,我发现它在大多数时候相当困惑,而且实际上更难阅读。无论如何,我的问题很简单。我看到很多这样的代码:varstream=awaitfile.readAsStreamAsync()这是怎么回事?这不等同

c# - 在 F# 中正确等待返回类型为 Task<T> 的异步 C# 方法

我希望能够从F#使用C#库。大多数情况下,这非常简单。但是,如果我尝试调用返回Task的函数我无法获得返回值。所以,我有具有以下定义的C#方法:publicasyncTaskReadEventAsync(stringstreamName,intposition)whereTEvent:class我正在尝试使用F#中的这个方法,如下所示:letreadEventFromEventStore(eventStore:IEventStoreRepository)(streamName:string)(position:int)=async{returneventStore.ReadEventA

c# - 如何使用异步/等待方法管理类似 NDC 的 log4net 堆栈? (每个任务堆栈?)

在普通/同步/单线程控制台应用程序中,NDC.Push可以很好地管理“当前项目”(可能在多个嵌套级别,但对于本示例只有1个级别)。例如:privatestaticILogs_logger=LogManager.GetLogger("Program");staticvoidMain(string[]args){BasicConfigurator.Configure();DoSomeWork("chunk1");DoSomeWork("chunk2");DoSomeWork("chunk3");}staticvoidDoSomeWork(stringchunkName){using(NDC

c# - AsyncLocal<T> 在非异步/等待代码中有什么作用?

我正在处理一个非常大且旧的桌面winform应用程序代码库。在此代码库中,有很多操作在后台线程中执行,主要使用BackgroundWorker。.此代码库中的一个常见模式是通过将工件绑定(bind)到正在执行的线程来隐藏复杂性。例如,数据库连接和事务存储在[ThreadStatic]中字段。我正在尝试改变这一点,并开始使用async/await代码,并受益于在池的任何线程中运行任务,并通过使用ConfigureAwait(false)允许任务在任何其他线程中继续执行.我知道[ThreadStatic]不适合async/await,我在这里阅读了几个建议使用AsyncLocal的答案相反

c# - 为什么使用 async 并等待 Task<>?

如果我有一个普通的方法,我想使其异步:publicintFoo(){}我会这样做:publicTaskFooAsync(){returnTask.Run(()=>Foo());}我为什么要这样做:publicasyncTaskFooAsync(){returnawaitTask.Run(()=>Foo());}我打算使用它的方式是:FooAsync().ContinueWith((res)=>{});我希望该方法不间断地运行,但我希望触发回调之类的东西,因此ContinueWith。但是对于第二个版本,使用它有什么意义吗? 最佳答案

c# - 如何将 .net 4.5 Async/Await 示例转换回 4.0

等效的asp.netmvc4.0代码是什么样的?usingSystem.Net;usingSystem.Net.Http;usingSystem.Web.Mvc;usingSystem.Threading.Tasks;usingNewtonsoft.Json;namespaceWeb.Controllers{publicclassHomeController:Controller{privateHttpClienthttpClient=newHttpClient();privatestaticdynamicshots;publicasyncTaskIndex(){if(shots==n

c# - 使用 Task.Delay() 的成本是多少?

我正在考虑在具有事件驱动逻辑的MMO游戏服务器中使用C#async\await。让我们假设有数千个实体在已知持续时间内做一些工作。所以我想为我的每个游戏对象调用Time.Delay()。(这是与普通无限循环相反的方法,每个游戏对象都有一些Update()调用。)有人知道Task.Delay()是如何实现的吗?它使用定时器吗?系统资源占用大吗?是否可以同时生成数千个Task.Delay()调用? 最佳答案 Task.Delay实现如下:publicstaticTaskDelay(intmillisecondsDelay,Cancell