草庐IT

c# - 发送异步电子邮件

我正在使用ASP.NETMVC3和MVCMailer,我尝试使用SendAsync发送电子邮件,但实际上它仍然需要更长的时间。所以我尝试像下面的代码一样使用Task.Factory:vartask1=Task.Factory.StartNew(state=>{varmail=newUserMailer();varmsg=mail.Welcome("MyName","myemail@gmail.com");msg.SendAsync();});task1.Wait();问题是,MVCMailer需要HttpContext,但在这个任务中我得到了HttpContextNull。如何发送异步

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

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

没有等待或返回的 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的延迟执行。您可以拥有许多实际上什么都不做的方法,它们只是设置一些选项或存储一些逻辑。最后有一些方法可以实际执行之前存储的所

C# async/await - 限制调用异步方法/锁定的次数

我来自C++世界,所以我非常习惯锁定线程和互斥保护。假设这个基本功能:asyncTaskBasicProcess(){//awaittimeconsumingtask}如何锁定此函数,以便一次只能运行一个BasicProcess?这是我想要实现的:asyncTaskBasicProcess(){lock(BasicProcessLock){//awaittimeconsumingtask}} 最佳答案 你可以为此使用SemaphoreSlim(1),用(1)创建的SemaphoreSlim将确保只有一个线程可以获得锁,任何其他试图获

c# - 为什么会为异步/等待状态机生成 bool "flag"?

如果编译以下代码:privateasyncTaskM(){returnawaitTask.FromResult(0);}然后反编译它(我使用了dotPeek)并检查最重要的MoveNext方法,您会看到在开头附近声明了一个bool变量;dotPeek为我选择了“标志”。boolflag=true;在这种情况下,您将在启动第一个异步调用后的默认case语句中看到该变量的一个后续使用者:if(!awaiter.IsCompleted){this.\u003C\u003E1__state=0;this.\u003C\u003Eu__\u0024awaiter11=awaiter;this.\

c# - UserManager 错误 - 在上一个异步操作完成之前在此上下文中启动了第二个操作

我的asp.netMVC5Web应用程序面临这个问题,使用Identityv2.0.0.0、EF6、CaSTLeWindsorIOC容器、MicrosoftSQLServer2005我正在尝试使用UserManagerExtensions,FindById()方法获取当前登录的用户,但它抛出错误“System.NotSupportedException:第二个操作在上一个异步操作完成之前在此上下文中启动。使用‘await’以确保在此上下文中调用另一个方法之前任何异步操作已完成。不保证任何实例成员都是线程安全的”我从堆栈跟踪中了解到是“AsyncHelper.RunSync()”导致了问

c# - 异步执行方法的最快方法?

我目前正在处理一个问题,我必须将大量函数分派(dispatch)给另一个线程以防止当前函数阻塞。现在我想知道执行此任务最快的方法是什么。目前我坚持ThreadPool.UnsafeQueueUserWorkItem因为它比常规的QueueUserWorkItem稍快。但是,恐怕线程池可能会在这里阻止它。有没有更快的方法将方法调用分派(dispatch)到另一个线程?我只是想知道这样一项任务的最佳做法是什么?不安全的代码不会有问题,因为它处于已经使用了大量互操作的场景中。谢谢j. 最佳答案 CLR(4)团队建议:Taskisnowth

c# - 使用 MVVM 模式实现异步 "loadData"方法的最佳方式

我试图了解在调用更新我的ViewModel的异步方法时使用什么是最佳方法。现在,假设我有这样的事情:查看:privateasyncvoidNavigationHelper_LoadState(objectsender,LoadStateEventArgse){//CallmyViewModelmethodtoupdatethedatatheUIisboundto}View模型:publicasyncTaskloadData(){this.Source=awaitloadStuffFromDatabaseAsync();}现在,我不确定应该使用以下哪一种方法:1)在我的LoadState