草庐IT

Await-Tree

全部标签

c# - 在 ASP.NET 事件处理程序中使用 async/await 是否安全?

当我遇到这个时,我正在用ASP.NET编写一些代码:protectedasyncvoidsomeButtonClickHandler(...){if(awaitblah)doSomething();elsedoSomethingElse();}询问后this问题我对async/await的工作原理有了更好的理解。但后来我突然想到,以上述方式使用async/await是否安全?我的意思是在调用awaitblah之后,调用者继续执行。这意味着它可能会在awaitblah完成之前将响应返回给客户端。这是正确的吗?如果是这种情况,doSomething()/doSomethingElse()会

c# - 如果我在未定义为任务的 IQueryable 上使用 await + ToListAsync() 是否正确

我正在使用带有EF-6的asp.netMVC-5,我不确定使用await+ToListAsync是否有效。例如,我有以下返回IQueryable的存储库方法:-publicIQueryablegetAllScanEmailTo(){returnt.TSets.Where(a=>a.Name.StartsWith("ScanEmail"));}我这样调用它:-varemailsTo=awaitrepository.getAllScanEmailTo().ToListAsync();一开始,我以为我会得到一个错误,因为我正在使用“等待”一个未定义为任务的方法,但上面的方法运行良好,所以有人

C# 5 async/await 线程机制感觉不对?

为什么调用线程要进入异步方法直到内部'await'?调用异步方法后立即生成一个线程不是更干净吗?这样您就可以确定异步方法会立即返回。您不必担心在异步方法的早期阶段没有做任何昂贵的事情。我倾向于知道一个方法是否会在“我的”线程上执行代码。不管堵不堵。该模型似乎开启了一系列介于两者之间的可能性。设计师比我聪明得多,所以我确信这是有充分理由的,我只是想好好想想。 最佳答案 Isn'titcleanertojustspawnathreadassoonasanasyncmethodiscalled.“异步”方法的全部意义在于避免生成新线程。您

c# - 使用 async/await 时如何更好地处理已处置的控件

考虑在UI线程上运行的这段代码:dividends=awaitDatabase.GetDividends();if(IsDisposed)return;//DoexpensiveUIworkhereearnings=awaitDatabase.GetEarnings();if(IsDisposed)return;//DoexpensiveUIworkhere//etc...注意每次我await我也查了IsDisposed.这是必要的,因为说我await长期运行Task.同时,用户在完成之前关闭表单。Task将完成并运行尝试访问已处理表单上的控件的延续。发生异常。有没有更好的方法来处理这

c# - 测试显示 "await"明显更慢,即使等待的对象已经完成

我想通过使用await/async来测试程序的开销。为了对此进行测试,我编写了以下测试类:publicclassEntity:INotifyCompletion{privateActioncontinuation;privateinti;publicvoidOnCompleted(Actioncontinuation){this.continuation=continuation;}publicEntityGetAwaiter(){returnthis;}publicEntityGetResult(){returnthis;}publicboolIsCompleted{get{retu

c# - 使用 async/await 限制信号量线程

我最近遇到了一个针对异步/等待调用限制线程的示例。在我的机器上分析和运行代码后,我想出了一种稍微不同的方法来做同样的事情。我不确定的是引擎盖下发生的事情是否几乎相同,或者是否有任何值得注意的细微差别?这是基于原始示例的代码:privatereadonlySemaphoreSlim_semaphore=newSemaphoreSlim(5);publicasyncTaskCallThrottledTasks(){vartasks=newList();for(intcount=1;count{try{intresult=awaitLongRunningTask();Debug.Print(

c# - 如何将 task.Wait(CancellationToken) 转换为 await 语句?

因此,task.Wait()可以转化为awaittask。当然,语义是不同的,但这大致就是我将使用Waits的阻塞代码转换为使用awaits的异步代码的方式。我的问题是如何将task.Wait(CancellationToken)转换为相应的await语句? 最佳答案 await用于异步方法/委托(delegate),它们要么接受CancellationToken,因此您应该在调用它时传递一个(即awaitTask.Delay(1000,cancellationToken)),或者它们没有并且不能真正被取消(例如等待I/O结果)。但

c# - 尝试在 : await Task. 之外捕获 Run(()

在awaitTask.Run(()=>之外的trycatch是否有意义,或者仅在await内部使用它们?privateasyncvoidTest(){try{awaitTask.Run(()=>{try{DoingSomething();}catch(Exceptionex){log.Error(ex.Message);}});}catch(Exceptionex){log.Error(ex.Message);}} 最佳答案 如果你处理Exception在委托(delegate)内部(在您的情况下仅用于记录目的),await在正常情

c# - await Task.CompletedTask 是为了什么?

我使用WindowsTemplateStudio创建了UWP应用程序在Build2017上引入的。下面的类是它生成的代码的一部分。publicclassSampleModelService{publicasyncTask>GetDataAsync(){awaitTask.CompletedTask;//();data.Add(newSampleModel{Title="Loremipsumdolorsit1",Description="Loremipsumdolorsitamet",Symbol=Symbol.Globe});data.Add(newSampleModel{Title=

c# - 将 async/await 与 DataReader 一起使用? (没有中间缓冲区!)

我的目标很简单,我想进行异步I/O调用(使用异步等待)-但是:不使用DataFlow依赖项(likeinthisanswer)没有中间缓冲区(notlikethisanswer)Projector函数应作为参数发送。(notlikethisanswer)好的。目前这是我的代码,它的工作是从数据库中读取并将每一行投影到FuncpublicIEnumerableGetSomeData(stringsql,Funcprojector){using(SqlConnection_conn=newSqlConnection(@"DataSource=...")){using(SqlCommand_