草庐IT

Async-await

全部标签

c# - 使用 Task.Run 调用异步方法似乎是错误的?

我最近看到这段代码是由我们为我们工作的承包商编写的。它要么非常聪明,要么非常愚蠢(我认为是后者,但我想要第二个意见)。我在asyncawait上的速度不是很快。基本上它是这样工作的:publicboolSend(TemplatedMessageDtomessage){returnTask.Run(()=>SendAsync(message)).GetAwaiter().GetResult();}publicasyncTaskSendAsync(TemplatedMessageDtomessage){//codedoingstuffvarresults=await_externalres

c# - 异步任务中的 HttpContext.Current null

我有一个使用存储库的方法(userRepo):publicoverrideTaskCreateLocalUserAsync(IUseruser,stringpassword,CancellationTokencancellationToken){vartask=newTask(()=>{TUserEntitynewUser=newTUserEntity{Id=user.Id,UserName=user.UserName,Password=password};userRepo.Save(newUser).Flush();returnnewIdentityResult(true);},ca

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# - 在 TPL 数据流中使用 async/await 和 yield return

我正在尝试使用TPLDataflow实现数据处理管道.但是,我对数据流比较陌生,并不完全确定如何正确使用它来解决我要解决的问题。问题:我正在尝试遍历文件列表并处理每个文件以读取一些数据,然后进一步处理该数据。每个文件大概是700MB至1GB在尺寸方面。每个文件包含JSON数据。为了并行处理这些文件而不是运行内存,我正在尝试使用IEnumerable与yieldreturn然后进一步处理数据。获得文件列表后,我想同时处理最多4-5个文件。我的困惑来自:如何使用IEnumerable和yeildreturn与async/await和数据流。偶遇thisanswer通过svick,但仍然不确

c# - 如何: Use async methods with LINQ custom extension method

我有一个LINQ自定义扩展方法:publicstaticIEnumerableDistinctBy(thisIEnumerableitems,Funcproperty){returnitems.GroupBy(property).Select(x=>x.First());}我是这样使用它的:varspc=context.pcs.DistinctBy(w=>w.province).Select(w=>new{abc=w}).ToList();但问题是我不想要ToList()我想要这样的东西varspc=awaitcontext.pcs.DistinctBy(w=>w.province).

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# - Task<TResult> 可以/应该包装在 C# 5.0 等待中,它在 TResult 中是协变的吗?

我非常喜欢使用C#5.0异步编程。然而,有几个地方更新旧代码以与TAP模型保持一致给我带来了问题。这是其中之一-我不确定为什么Task在TResult中不是协变的,但在尝试更新协变接口(interface)以从同步模式移动到异步模式时,它给我带来了问题:旧代码:publicinterfaceIInitializable//**outgenericmodifier**{//////Booleantoindicateifclassisready///boolIsInitialized{get;}//////Callsforinstancetobeinitializedusingcurren

c# - 为什么 IQueryables 没有 SingleOrDefaultAsync?

以下代码无法编译,因为SingleOrDefaultAsync()不是GetAppointments()的合适扩展。我只是想知道为什么......publicIQueryableGetAppointments(){returnContext.Appointments;}publicasyncTaskGetAppointmentAsync(intappointmentId){returnawaitGetAppointments().SingleOrDefaultAsync(a=>a.ID==appointmentId);}我正在使用EF6.0.0。请完全忽略我在这里所做的事情。我只是试图

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

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