草庐IT

Async-await

全部标签

c# - 超时使用 TaskCompletionSource 实现的异步方法

我有一个黑盒对象,它公开了一个方法来启动异步操作,并在操作完成时触发一个事件。我把它包装成TaskBlackBoxOperationAysnc()使用TaskCompletionSource的方法-效果很好。但是,在该异步包装器中,如果在给定超时后未收到事件,我想管理完成异步调用并出现超时错误。目前我用一个计时器来管理它:publicTaskBlackBoxOperationAysnc(){vartcs=newTaskCompletionSource();constinttimeoutMs=20000;Timertimer=newTimer(_=>tcs.TrySetResult(Op

c# - 等待异步任务而不在 AggregateException 中包装异常

我正在使用一个提供以...Async结尾的方法的库并返回Task.我将在命令行应用程序中使用它们。所以我需要经常同步调用它们。C#当然不允许在Main中调用这些方法方法,因为您不能使用asyncMain上的修饰符方法。假设这是任务:vartask=datastore.Save(data);我找到了几个解决方案,例如:Tasks.WaitAll(task);task.Wait();但是所有这些都在AggregateException中包含抛出的异常,我不想要那个。我只想说task.Result并且我希望抛出原始异常。当我使用返回Task的方法时,task.Result抛出Aggregat

c# - 等待异步任务而不在 AggregateException 中包装异常

我正在使用一个提供以...Async结尾的方法的库并返回Task.我将在命令行应用程序中使用它们。所以我需要经常同步调用它们。C#当然不允许在Main中调用这些方法方法,因为您不能使用asyncMain上的修饰符方法。假设这是任务:vartask=datastore.Save(data);我找到了几个解决方案,例如:Tasks.WaitAll(task);task.Wait();但是所有这些都在AggregateException中包含抛出的异常,我不想要那个。我只想说task.Result并且我希望抛出原始异常。当我使用返回Task的方法时,task.Result抛出Aggregat

c# - 如何使用 call/cc 实现 c# 5.0 中的新异步功能?

我一直在关注有关c#5.0中新的async功能的新公告。我对连续传递样式以及新的c#编译器对类似来自EricLippert'spost的代码片段的代码的转换有基本的了解。:asyncvoidArchiveDocuments(Listurls){Taskarchive=null;for(inti=0;i我知道有些语言通过call-with-current-continuation(callcc)在本地实现延续,但我真的不明白它是如何工作的或者它到底做了什么。所以问题来了:如果Anders等人。决定硬着头皮在c#5.0中实现callcc而不是async/await特例,上面的代码片段会是什

c# - 如何使用 call/cc 实现 c# 5.0 中的新异步功能?

我一直在关注有关c#5.0中新的async功能的新公告。我对连续传递样式以及新的c#编译器对类似来自EricLippert'spost的代码片段的代码的转换有基本的了解。:asyncvoidArchiveDocuments(Listurls){Taskarchive=null;for(inti=0;i我知道有些语言通过call-with-current-continuation(callcc)在本地实现延续,但我真的不明白它是如何工作的或者它到底做了什么。所以问题来了:如果Anders等人。决定硬着头皮在c#5.0中实现callcc而不是async/await特例,上面的代码片段会是什

c# - 通过等待每个任务异步转换 IEnumerable<Task<T>>

今天我想知道如何通过等待每个任务来转换任务列表。考虑以下示例:privatestaticvoidMain(string[]args){try{Run(args);Console.ReadLine();}catch(Exceptionex){Console.WriteLine(ex.ToString());Console.ReadLine();}}staticasyncTaskRun(string[]args){//Version1:doescompile,butuglyandListoverheadvartasks1=GetTasks();ListgainStrings1=newLis

c# - 通过等待每个任务异步转换 IEnumerable<Task<T>>

今天我想知道如何通过等待每个任务来转换任务列表。考虑以下示例:privatestaticvoidMain(string[]args){try{Run(args);Console.ReadLine();}catch(Exceptionex){Console.WriteLine(ex.ToString());Console.ReadLine();}}staticasyncTaskRun(string[]args){//Version1:doescompile,butuglyandListoverheadvartasks1=GetTasks();ListgainStrings1=newLis

c# - MoveNext 而不是实际的方法/任务名称

使用log4net声明为:privatereadonlyILoglog=LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType());在异步方法或任务中,像这样:publicasyncvoidCheckSomething(){log.Info(null);//....}记录MoveNext而不是CheckSomething。知道如何让它记录实际的方法名称吗? 最佳答案 所有async方法都被重写到状态机中以满足方法中潜在的await值。代码所在的最后一个方法是

c# - MoveNext 而不是实际的方法/任务名称

使用log4net声明为:privatereadonlyILoglog=LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType());在异步方法或任务中,像这样:publicasyncvoidCheckSomething(){log.Info(null);//....}记录MoveNext而不是CheckSomething。知道如何让它记录实际的方法名称吗? 最佳答案 所有async方法都被重写到状态机中以满足方法中潜在的await值。代码所在的最后一个方法是

c# - 如何处理 xUnit .net 的 Assert.Throws<T> 中任务抛出的异常?

以下异步xUnit.net用lambda测试标有async修饰符通过报告没有抛出异常而失败:[Theory,AutoWebData]publicasyncTaskSearchWithNullQueryThrows(SearchServicesut,CancellationTokendummyToken){//Fixturesetup//ExercisesystemandverifyoutcomeAssert.Throws(async()=>awaitsut.SearchAsync(null,dummyToken));//Teardown}确保ArgumentNullException实