草庐IT

c# - 为什么未等待的异步方法不抛出异常?

我认为异步方法在到达等待之前应该像普通方法一样表现。为什么这不会抛出异常?有没有办法在不等待的情况下抛出异常?usingSystem;usingSystem.Threading.Tasks;publicclassTest{publicstaticvoidMain(){vart=newTest();t.Helper();}publicasyncTaskHelper(){thrownewException();}} 最佳答案 async方法中抛出的异常按照设计存储在返回的任务中。要获得异常,您可以:await任务:awaitt.Help

c# - VS 2012 发布后,使用异步与 VS 2010 的正确方法?

由于工作限制,我需要在不久的将来继续使用VisualStudio2010。同时,我在个人编码中一直在学习Async。最新的AsyncCTP是否与C#5.0的Async语言特性完全一致?安装AsyncCTP是否是将Async与VS2010一起使用的正确方法? 最佳答案 AsyncCTP是在VisualStudio2010中使用async的唯一方法。但是,它并不是async进入.NET4.5/VisualStudio2012,CTP中的几个错误已在最终版本中得到修复。根据CTP的自述文件,您不会在VisualStudio2010中获得这

c# - 将秒表与异步方法一起使用

我有一些代码如下:publicvoidStart(){varwatch=newStopwatch();watch.Start();Task.Factory.StartNew(MyMethod1);Task.Factory.StartNew(MyMethod2);watch.Stop();Log(watch.ElapsedMilliseconds);Task.Factory.StartNew(MyMethod3);}因为MyMethod1和MyMethod2被异步调用watch.Stop()在错误的时间被调用。我如何确保在MyMethod1和MyMethod2完成后调用并记录.Stop但

c# - .NET Core DI 中的异步提供程序

我只是想知道是否可以在DI期间使用async/await。执行以下操作,DI无法解析我的服务。services.AddScoped(asyncprovider=>{varclient=newMyClient();awaitclient.ConnectAsync();returnclient;});下面的代码工作得很好。services.AddScoped(provider=>{varclient=newMyClient();client.ConnectAsync().Wait();returnclient;}); 最佳答案 虽然理论

c# - 从 C# 引用异步 F# 数据类型

我创建了一个返回此数据类型的F#库FSharpAsync>>如何访问FSharpAsync类型,以便我可以从C#枚举元组并打印出内容? 最佳答案 通常不建议公开F#类型,例如FSharpAsync在将由C#客户端使用的公共(public)接口(interface)中(参见F#componentdesignguidelines)。您可以使用Async.StartAsTask(在F#端)将操作公开为Task这很容易从C#中使用。事实上,我还会用命名类型(捕获数据结构的含义)替换元组。元组可以在C#中使用,但它们在C#中不是惯用的://A

c# - Task<T> 与 C# 中的异步委托(delegate)?

我有这个简单的方法:staticintWork(strings){returns.Length;}我可以运行它:Tasktask=Task.Factory.StartNew(()=>Work("lalala"));...intresult=task.Result;或者用这个:Funcmethod=Work;IAsyncResultmyIasync=method.BeginInvoke("lalala",null,null);...intresult=method.EndInvoke(myIasync);他们都使用线程池线程。都等待执行完成(读取值时)两者都向调用者重新抛出任何异常。我什

c# - 是否有比在异步方法中调用 ConfigureAwait(false) 更具可读性的替代方法?

我目前正在编写大量async库代码,并且我知道在每次异步调用之后添加ConfigureAwait(false)的做法,以便避免将延续代码编码回原始(通常是UI)线程上下文。由于我不喜欢未标记的bool参数,因此我倾向于将其写为ConfigureAwait(continueOnCapturedContext:false)。我添加了一个扩展方法以使其更具可读性(并减少了输入):publicstaticclassTaskExtensions{publicstaticConfiguredTaskAwaitableWithoutCapturingContext(thisTasktask){ret

c# - 为什么要对 QueueBackgroundWorkItem 使用异步?

在ASP.NETQueueBackgroundWorkItem方法中使用async有什么好处?HostingEnvironment.QueueBackgroundWorkItem(asynccancellationToken=>{varresult=awaitLongRunningMethodAsync();//etc.});我的理解是异步函数是用来防止长时间运行的任务阻塞主线程的。但是,在这种情况下,我们不是在它自己的线程中执行任务吗?与非异步版本相比有什么优势:HostingEnvironment.QueueBackgroundWorkItem(cancellationToken=

c# - 异步写入套接字线程安全吗?

考虑Socket.BeginSend()方法。如果两个线程池线程同时调用此方法,它们各自的消息最终会相互混合还是套接字类会阻止这种情况发生? 最佳答案 .NETSocket实例不是线程安全的,因为同时调用某些方法(相同或不同的方法)可能会导致状态不一致。但是,BeginSend()和BeginReceive()方法本身是线程安全的。对每个(或两者)进行多次未完成调用是安全的。在BeginReceive()的情况下,当数据以调用的顺序可用时,它们将被服务。例如,如果您的处理时间很长,但您希望其他接收尽快发生,这将很有用。当然,在这种情

c# - 我如何对这个(正确地)抛出异常的异步方法进行单元测试?

我在接口(interface)中有以下方法..Task>SearchAsync(TUsearchOptions);效果很好。现在我正在尝试进行单元测试以测试何时出现问题-代码会抛出异常。在这种情况下,我已将我的方法设置为抛出HttpRequestException。我的单元测试没有说我抛出了那个异常..varresult=Should.Throw(async()=>awaitservice.SearchAsync(searchOptions));单元测试的错误信息是Shouldly.ChuckedAWobblyvarresult=ShouldthrowSystem.Net.Http.H