草庐IT

异步FIFO

全部标签

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

c# - DebuggerStepThrough、DebuggerHidden 在异步等待方法中不起作用

当您打开"Breakwhenanexceptionisthrown"VisualStudio调试器中的功能,它会针对选定的异常类型在任何地方中断。告诉它不要中断特定方法的方法是decoratethesemethodswithDebuggerStepThroughattribute(orDebuggerHidden).这,显然,出于某种原因不适用于async方法。这是重现该问题的片段。调试器将在TestAsync内部中断,即使它标有属性,但它不会在Test内部中断,因为异常(exception)(它们之间的唯一区别是第一个用async关键字标记):publicclassAttribute

c# - 如何在 Autofac 注册中调用异步方法?

我想调用awaitableasync注册过程中的方法是这样的://buildervariablecontainsAutofacContainerBuilderbuilder.Register((async(context,parameters)=>//needasynchere{varsomeClass=newSomeClass(context.Resolve());awaitsomeClass.SomeAsyncInitMethod();//needtoawaitresultreturnsomeClass;})).As().SingleInstance();SomeClass工具IS

c# - 等待 N 个异步方法完成时是否有标准模式可遵循?

publicclassFooDataRepository{privateMyServiceReferenceClientClient{get;set;}publicvoidFooClass(){Client=newMyServiceReferenceClient();Client.SaveFooCompleted+=Client_SaveFooCompleted;Client.SaveBarCompleted+=Client_SaveBarCompleted;}privatevoidClient_SaveFooCompleted(Objectsender,EventArgse){...