由于我必须在我的应用程序中进行大量文件I/O操作,我决定异步实现它们。查看MSDN,没有File.Create、File.Delete和File.Move的异步副本。据我了解,原因是不存在用于文件删除、创建或移动的异步Win32实现,所以我最终得到以下解决方案:publicstaticTaskDeleteAsync(stringpath){Guard.FileExists(path);returnTask.Run(()=>File.Delete(path));}publicstaticTaskCreateAsync(stringpath){Guard.IsNotNullOrWhites
基本问题是如何创建需要调用方法的单元测试,等待测试类上发生事件,然后调用另一个方法(我们实际要测试的方法)?如果您有时间进一步阅读,下面是场景:我正在开发一个必须控制硬件的应用程序。为了避免硬件可用性的依赖性,当我创建我的对象时,我指定我们在测试模式下运行。当发生这种情况时,被测试的类会创建适当的驱动程序层次结构(在本例中是硬件驱动程序的薄模拟层)。假设所讨论的类是一个电梯,我想测试给我电梯所在楼层数的方法。这是我的虚拟测试现在的样子:[TestMethod]publicvoidTestGetCurrentFloor(){varelevator=newElevator(Elevator
如果用户执行删除项目等操作,它会立即从UI中删除它们,然后使用TPL在后台线程上将它们从数据库中删除。问题是,如果用户在后台线程结束之前退出应用程序,则该项目实际上不会被删除。在关闭应用程序之前是否有等待异步操作完成的标准方法?我的异步调用是这样的:if(MyObjectList.Contains(obj))MyObjectList.Remove(obj);Task.Factory.StartNew(()=>DAL.DeleteObject(obj));更新这是我使用的最终代码。我很高兴看到它按预期工作,但如果我可以改进它,请告诉我。我还有很多东西要学:)publicpartialcl
我在C#中有以下异步函数:privateasyncTaskCallDatabaseAsync(Func>execAsync){using(varconnection=newSqlConnection(_connectionString)){connection.Open();returnawaitexecAsync(connection);}}它允许执行任何异步函数execAsync,该函数将SQL连接作为参数并使用它来进行数据库调用,方法是提供连接对象并确保其正确关闭。然后从WebApiController中的操作调用此函数,如下所示:publicasyncTaskMyAction(
我正在尝试编写一个方法来尝试执行一个操作,但会吞下引发的任何异常。我的第一次尝试如下:publicstaticvoidSafeExecute(ActionactionThatMayThrowException){try{actionThatMayThrowException();}catch{//noop}}在使用同步操作调用时有效:SafeExecute(()=>{thrownewException();});但是当使用异步操作调用时失败:SafeExecute(async()=>{awaitTask.FromResult(0);thrownewException();});是否可以
我很乐意在调用内部处理程序的SendAsync()之前执行同步工作,并在内部处理程序通过完成完成后执行同步工作。例如:protectedoverrideTaskSendAsync(HttpRequestMessagerequest,CancellationTokencancellationToken){//dosomesyncworkbeforeinnerhandlerherevarsendTask=base.SendAsync(request,cancellationToken);returnsendTask.ContinueWith(task=>{//dosomesyncworka
我想使用awaitTask.Run(DoWork),在ThreadPool上做一些重复的单线程计算工作。问题是,我需要在DoWork中使用STACOM对象,所以我想我不能使用ThreadPool,因为我不能改变池线程的单元状态。如何在这种情况下仍然使用async/await?使用自定义任务调度程序创建我自己的STA线程池听起来像是一项繁重的工作。 最佳答案 StephenToub已经写了一个StaTaskScheduler(archive);我建议您使用它。然后您可以使用该TaskScheduler构造一个TaskFactory。T
我正在尝试使用.NET4.5async&await实现完全异步blob下载。假设整个blob可以一次放入内存中,并且我们希望将其保存在string中。代码:publicasyncTaskDownloadTextAsync(ICloudBlobblob){using(StreammemoryStream=newMemoryStream()){IAsyncResultasyncResult=blob.BeginDownloadToStream(memoryStream,null,null);awaitTask.Factory.FromAsync(asyncResult,(r)=>{blob
我正在尝试检查异步方法抛出的具体异常。为此,我使用MSTEST和FluentAssertions2.0.1。我检查过这个DiscussiononCodeplex并查看它如何与异步异常方法一起工作,这是关于FluentAssertionsasynctests的另一个链接:尝试使用我的“生产”代码一段时间后,我关闭了Fluentassertions伪造的aync类,结果代码如下(将此代码放在[TestClass]中:[TestMethod]publicvoidTestThrowFromAsyncMethod(){varasyncObject=newAsyncClass();Actionac
我一直在谷歌搜索甚至Bing-ing,但我没有想出任何令人满意的东西。我有一个包含一些命令的ViewModel,例如:SaveCommand、NewCommand和DeleteCommand。我的SaveCommand执行保存到文件操作,我希望它是一个async操作,这样UI就不会等待它。我的SaveCommand是AsyncCommand的一个实例,它实现了ICommand。SaveCommand=newAsyncCommand(asyncparam=>{Connectioncon=awaitConnection.GetInstanceAsync(m_configurationPat