草庐IT

c# - ReactiveUI 中的 TestScheduler 异步方法死锁

我正在尝试在测试中使用带有异步方法的reactiveui测试调度程序。等待异步调用时测试挂起。根本原因似乎是在异步方法中等待的命令。[Fact]publicasyncTaskTest()=>awaitnewTestScheduler().With(asyncscheduler=>{awaitSomeAsyncMethod();//***executionnevergetshereDebugger.Break();});privateasyncTaskSomeAsyncMethod(){varcommand=ReactiveCommand.CreateFromTask(async()=>

c# - 如何连接异步枚举?

我有一个具有此返回类型的方法:publicasyncTask>GetAll()它进行了一些进一步的异步调用(未知数量),每个调用返回一个可枚举T的任务,然后想要连接结果以返回。vardata1=src1.GetAll();vardata2=src2.GetAll();vardata3=src3.GetAll();//andsoon现在很容易等待所有结果并连接结果以生成单个可枚举项,但我希望在第一次调用返回后立即使用可枚举项,如果有任何调用,则可能会等待调用者/枚举器当可用结果用完时仍然悬而未决。我是否必须为此手动滚动一个concat,以解决当它包装在任务中时缺少枚举器支持的问题?或者在

c# - 使用 OWIN 和异步方法的多语言网站

背景我正在使用ASP.NET4.6、C#、IIS上的OWIN管道(Microsoft.Owin.Host.SystemWeb)创建一个简单的多语言网站,大量异步方法调用和标准、全局资源文件(App_GlobalResources中的*.resx)。该网站使用MVC5、WebAPI2和Autofac作为依赖解析器。问题我无法正确更改生成页面的语言环境/区域性,因为异步方法对每个请求使用多个线程,而且我找不到设置Thread.Current[UI]Culture与给定请求关联的每个线程,因为这些属性不同步。我还希望保持干净的代码,不要让“异步/等待文化配置”弄乱有用的代码。代码启动.csp

c# - 如何实现异步 File.Delete/Create/Move?

由于我必须在我的应用程序中进行大量文件I/O操作,我决定异步实现它们。查看MSDN,没有File.Create、File.Delete和File.Move的异步副本。据我了解,原因是不存在用于文件删除、创建或移动的异步Win32实现,所以我最终得到以下解决方案:publicstaticTaskDeleteAsync(stringpath){Guard.FileExists(path);returnTask.Run(()=>File.Delete(path));}publicstaticTaskCreateAsync(stringpath){Guard.IsNotNullOrWhites

c# - 如何 TDD 异步事件?

基本问题是如何创建需要调用方法的单元测试,等待测试类上发生事件,然后调用另一个方法(我们实际要测试的方法)?如果您有时间进一步阅读,下面是场景:我正在开发一个必须控制硬件的应用程序。为了避免硬件可用性的依赖性,当我创建我的对象时,我指定我们在测试模式下运行。当发生这种情况时,被测试的类会创建适当的驱动程序层次结构(在本例中是硬件驱动程序的薄模拟层)。假设所讨论的类是一个电梯,我想测试给我电梯所在楼层数的方法。这是我的虚拟测试现在的样子:[TestMethod]publicvoidTestGetCurrentFloor(){varelevator=newElevator(Elevator

c# - 当应用程序退出时,如何等待我的异步操作完成?

如果用户执行删除项目等操作,它会立即从UI中删除它们,然后使用TPL在后台线程上将它们从数据库中删除。问题是,如果用户在后台线程结束之前退出应用程序,则该项目实际上不会被删除。在关闭应用程序之前是否有等待异步操作完成的标准方法?我的异步调用是这样的:if(MyObjectList.Contains(obj))MyObjectList.Remove(obj);Task.Factory.StartNew(()=>DAL.DeleteObject(obj));更新这是我使用的最终代码。我很高兴看到它按预期工作,但如果我可以改进它,请告诉我。我还有很多东西要学:)publicpartialcl

c# - Using block 中的异步

我在C#中有以下异步函数:privateasyncTaskCallDatabaseAsync(Func>execAsync){using(varconnection=newSqlConnection(_connectionString)){connection.Open();returnawaitexecAsync(connection);}}它允许执行任何异步函数execAsync,该函数将SQL连接作为参数并使用它来进行数据库调用,方法是提供连接对象并确保其正确关闭。然后从WebApiController中的操作调用此函数,如下所示:publicasyncTaskMyAction(

c# - 捕获从异步 lambda 抛出的异常

我正在尝试编写一个方法来尝试执行一个操作,但会吞下引发的任何异常。我的第一次尝试如下:publicstaticvoidSafeExecute(ActionactionThatMayThrowException){try{actionThatMayThrowException();}catch{//noop}}在使用同步操作调用时有效:SafeExecute(()=>{thrownewException();});但是当使用异步操作调用时失败:SafeExecute(async()=>{awaitTask.FromResult(0);thrownewException();});是否可以

c# - DelegatingHandler 应该如何进行异步调用(ASP.NET MVC Web API)?

我很乐意在调用内部处理程序的SendAsync()之前执行同步工作,并在内部处理程序通过完成完成后执行同步工作。例如:protectedoverrideTaskSendAsync(HttpRequestMessagerequest,CancellationTokencancellationToken){//dosomesyncworkbeforeinnerhandlerherevarsendTask=base.SendAsync(request,cancellationToken);returnsendTask.ContinueWith(task=>{//dosomesyncworka

c# - 异步/等待、ThreadPool 和 SetApartmentState

我想使用awaitTask.Run(DoWork),在ThreadPool上做一些重复的单线程计算工作。问题是,我需要在DoWork中使用STACOM对象,所以我想我不能使用ThreadPool,因为我不能改变池线程的单元状态。如何在这种情况下仍然使用async/await?使用自定义任务调度程序创建我自己的STA线程池听起来像是一项繁重的工作。 最佳答案 StephenToub已经写了一个StaTaskScheduler(archive);我建议您使用它。然后您可以使用该TaskScheduler构造一个TaskFactory。T