草庐IT

Async-await

全部标签

c# - 发送邮件异步 : An asynchronous module or handler completed while an asynchronous operation was still pending

在使用SendMailAsync时出现以下错误:Anasynchronousmoduleorhandlercompletedwhileanasynchronousoperationwasstillpending我的代码:publicstaticasyncTaskSendEmail(MessageContentmessageContent,stringemailBody){SmtpClientsmtpClientNoSend=newSmtpClient();awaitsmtpClientNoSend.SendMailAsync(mailMessage);}来自Controller的调用:

c# - 对 CancellationTokenSource.Cancel 的调用永远不会返回

我有一种情况,对CancellationTokenSource.Cancel的调用永远不会返回。相反,在Cancel被调用之后(在它返回之前),执行将继续执行被取消代码的取消代码。如果被取消的代码随后没有调用任何可等待的代码,那么最初调用Cancel的调用者永远不会取回控制权。这很奇怪。我希望Cancel简单地记录取消请求并立即返回独立于取消本身。事实上,调用Cancel的线程最终会执行属于被取消操作的代码,并且在返回给Cancel的调用者之前这样做看起来像框架中的错误。这是怎么回事:有一段代码,我们称之为“工作代码”,它正在等待一些异步代码。为简单起见,假设此代码正在等待Task.D

c# - Entity Framework 6 异步操作和 TranscationScope

我在stackoverflow上搜索,没有找到类似的问题,如果已经有请指出我。我试图通过同步和异步操作实现一个通用的可重用存储库,但由于我对EntityFramework和工作单元知之甚少,我正在努力寻找实现它的正确方法。我在SaveAndCommit操作上添加了一些变体,但不知道使用事务和异步执行此操作的最佳方法是什么。----Edit----AspermyunderstandingtransactionsshouldbeusedwhenmorethanoneoperationsisperformedbutforunderstandingpurposesIuseditforoneop

c# - 没有 "threads"的异步和等待?我可以自定义引擎盖下发生的事情吗?

我有一个关于如何自定义新async的问题/await关键字和TaskC#4.5中的类是。首先了解我的问题的一些背景知识:我正在开发具有以下设计的框架:一个线程有一个“当前待办事项”列表(通常大约有100到200个项目),这些列表存储为自己的数据结构并作为列表保存。它有一个Update()枚举列表并查看某些“事物”是否需要执行并执行的函数。基本上它就像一个大线程调度器。为了简化事情,让我们假设“要做的事情”是返回bool值true的函数。当它们“完成”时(不应称为下一次更新)和false下次更新时调度程序应该再次调用它们。所有“事物”不能并发运行,也必须在一个线程中运行(因为线程静态变量

c# - 了解一行中使用的 Task.Run + Wait() + async + await 的使用

我是C#新手,所以我在理解一些概念时遇到了困难,并且遇到了一段我不太理解的代码:staticvoidMain(string[]args){Task.Run(async()=>{awaitSomeClass.Initiate(newConfiguration());}).Wait();while(true);}据我了解,这会运行一个启动方法的任务。此方法运行,然后,一旦完成,就会进入无限循环等待。感觉要么是代码没看懂,要么是我没理解对。谢谢 最佳答案 你可以把它分成几个部分:async()=>{awaitSomeClass.Initi

c# - 将 Socket.ReceiveAsync 替换为 NetworkStream.ReadAsync(可等待)

我有一个应用程序可以同时建立几百个TCP连接,并从它们接收源源不断的数据流。privatevoidstartReceive(){SocketAsyncEventArgse=newSocketAsyncEventArgs();e.Completed+=receiveCompleted;e.SetBuffer(newbyte[1024],0,1024);if(!Socket.ReceiveAsync(e)){receiveCompleted(this,e);}}voidreceiveCompleted(objectsender,SocketAsyncEventArgse){ProcessD

c# - 为什么 void async 不好?

所以我理解为什么从async返回void通常是没有意义的,但我遇到过我认为它完全有效的情况。考虑以下人为的示例:protectedoverridevoidOnLoad(EventArgse){if(CustomTask==null)//Donotawaitanything,letOnLoadreturn.PrimeCustomTask();}privateTaskCompletionSourceCustomTask;//IDONOTcareaboutthereturnvaluefromthis.Sowhyisvoidbad?privateasyncvoidPrimeCustomTask

没有等待或返回的 C# 异步任务方法

我有一个在两个地方实现的接口(interface)I,例如:interfaceI{TaskDoSomething();}该接口(interface)具有异步任务DoSomething方法API,然后在类A中实现,例如:classA:I{....}classB:I{....}在类A中,DoSomething的实现如下,没问题:publicasyncTaskDoSomething(){if(...){awaitDoIt();}}但是,在类B中,DoSomething()的实现不应执行任何操作。所以,它的实现看起来像这样:publicasyncTaskDoSomething(){//noth

c# - 简单地停止异步方法

我有这种播放声音的方法,当用户点击屏幕时,我希望它在用户再次点击屏幕时停止播放。但问题是“DoSomething()”方法不会停止,它会一直运行直到完成。boolkeepdoing=true;privateasyncvoidScreenTap(objectsender,System.Windows.Input.GestureEventArgse){keepdoing=!keepdoing;if(!playing){DoSomething();}}privateasyncvoidDoSomething(){playing=true;for(inti=0;keepdoing;count++

c# - 如何设计流畅的异步操作?

异步操作似乎无法与我更喜欢编写代码的流畅界面配合使用。异步如何与流畅结合?示例:我有两个方法之前返回了一个MyEntity但在更改为Async时效果不佳。在我异步化它们之后,我必须await任务的结果,但我必须为添加的每个步骤执行此操作:MyEntityXx=await(awaitFirstStepAsync()).SecondStepAsync();必须有更好的方法。 最佳答案 更好的方法是使用类似于LINQ的延迟执行。您可以拥有许多实际上什么都不做的方法,它们只是设置一些选项或存储一些逻辑。最后有一些方法可以实际执行之前存储的所