草庐IT

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

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

c# - 使用 LINQ ForEach() 异步等待

我有以下正确使用异步/等待范式的代码。internalstaticasyncTaskAddReferencseData(ConfigurationDbContextcontext){foreach(varsinkNameinRequiredSinkTypeList){varsinkType=newSinkType(){Name=sinkName};context.SinkTypeCollection.Add(sinkType);awaitcontext.SaveChangesAsync().ConfigureAwait(false);}}如果我不使用foreach(),而是想使用LIN

c# - 异步多播委托(delegate)

我最近一直在做一个广泛使用事件的项目。我需要做的一件事是在多播委托(delegate)上异步调用多个事件处理程序。我认为诀窍是对GetInvocationList中的每个项目调用BeginInvoke,但似乎那里不存在BeginInvoke。有没有办法做到这一点,或者我是否需要开始使用ThreadPool.QueueUserWorkItem并以这种方式推出我自己的解决方案? 最佳答案 GetInvocationList只返回一个Delegate类型的数组,它不知道适当的签名。但是,您可以将每个返回值强制转换为您的特定委托(deleg

c# - 针对特定异常的单元测试异步方法

有没有人举例说明如何在Windows8Metro应用程序中对异步方法进行单元测试,以确保它抛出所需的异常?给定一个带有异步方法的类publicstaticclassAsyncMathsStatic{privateconstintDELAY=500;publicstaticasyncTaskDivide(intA,intB){awaitTask.Delay(DELAY);if(B==0)thrownewDivideByZeroException();elsereturnA/B;}}我想使用新的Async.ExpectsException结构编写一个测试方法。我试过了:-[TestMeth

c# - 异步任务方法后触发回调

我需要在foreach时触发回调循环已完成对List中每个项目的搜索.privateasyncvoidstartSearchBtn_Click(objectsender,EventArgse){awaitSearch(files,selectTxcDirectory.SelectedPath,status);}privatestaticasyncTaskSearch(Listfiles,stringpath,LabelstatusText){foreach(stringfileinfiles){XmlDocumentxmlDoc=newXmlDocument();xmlDoc.Load

c# - 使用异步从数据库返回数据有什么好处?

我已经阅读了很多关于WebApi2的文章,我真的很喜欢它,但是我只是不明白为什么每个方法都使用async而不是标准方法。例子如下:[ResponseType(typeof(BookDto))]publicasyncTaskGetBook(intid){BookDtobook=awaitdb.Books.Include(b=>b.Author).Where(b=>b.BookId==id).Select(AsBookDto).FirstOrDefaultAsync();if(book==null){returnNotFound();}returnOk(book);}这里有什么好处?在服务

c# - 是否需要 relaycommand 的异步版本才能正确运行异步方法

我在View模型中定义了以下代码。我认为Func类型的SaveAsync正在转换为Action,因为RelayCommand采取的是Action而不是Func但我不清楚这意味着什么。1)RelayCommand是否需要换成异步版本(RelayCommandAsync)?2)关于异步,当前代码究竟在做什么?3)如果有什么我可以/应该改变以改进/纠正它怎么办?privateICommand_saveCommand;publicICommandSaveCommand{get{return_saveCommand??(_saveCommand=newRelayCommand(async()=>

c# - 以指定的时间间隔定期运行异步方法

我需要从C#网络应用程序向服务发布一些数据。数据本身是在用户使用应用程序时收集的(一种使用统计信息)。我不想在每个用户的请求期间向服务发送数据,我宁愿在应用程序中收集数据,然后在单独的线程中的单个请求中发送所有数据,这不满足用户请求(我的意思是用户不必等待服务处理请求)。为此,我需要一种JS的setInterval模拟-每X秒启动一次函数以将所有收集的数据刷新到服务。我发现Timer类提供了一些类似的(Elapsed事件)。但是,这只允许运行该方法一次,但这不是什么大问题。它的主要困难在于它需要签名voidMethodName(objecte,ElapsedEventArgsargs)

c# - Autofac - 无法创建请求生命周期范围,因为 HttpContext 不可用 - 由于异步代码?

简短问题:Sameasthisunansweredproblem长问题:我只是将一些代码从使用Autofac的MVC4+WebApi解决方案移植到我的新解决方案中,该解决方案也使用Autofac但仅使用WebApi2(没有MVC5.1项目,只有一个WebAPI)。在我之前的解决方案中,我有MVC4和WebApi,所以我有2个Bootstrapper.cs文件,每个文件一个。我只为新项目复制了WebApiBootstrap。现在我在新解决方案中有2个其他项目需要拉取依赖项。让我们假设我必须使用DependencyResolver.Current.GetService()尽管它是一种反模式

c# - 编写一个等待 bool 值的异步方法

我想编写一个方法来等待将变量设置为true。这是伪代码。boolIsSomethingLoading=falseSomeDataTheData;publicasyncTaskGetTheData(){awaitIsSomethingLoading==true;returnTheData;}TheData将由PrismEvent与IsSomethingLoading变量一起设置。我调用了GetTheData方法,但我希望它异步运行(现在它只在数据未准备好时返回null。(这会导致其他问题。)有办法吗? 最佳答案 在许多类似的情况下,您