草庐IT

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# - 了解 TaskScheduler.Current 的行为

这是一个简单的WinForms应用程序:usingSystem;usingSystem.Diagnostics;usingSystem.Threading;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;namespaceWindowsFormsApplication{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}privateasyncvoidbutton1_Click(objectsender,EventArgse){varts=Task

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

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

C# 异步任务无限期等待

我正在尝试使用“async”和“await”提供的功能来异步下载网页内容,但我遇到了任务永远等待完成的问题。您能告诉我以下代码片段有什么问题吗?protectedvoidPage_Load(objectsender,EventArgse){varwebsites=newstring[]{"http://www.cnn.com","http://www.foxnews.com"};vartasks=websites.Select(GenerateSomeContent).ToList();//Idon'twanttouse'awaitTasks.WhenAll(tasks)'asInee

c# - 为什么我的异步代码调试的时候是同步运行的?

我正在尝试使用异步功能实现一个名为ReadAllLinesAsync的方法。我已经生成了以下代码:privatestaticasyncTask>FileReadAllLinesAsync(stringpath){using(varreader=newStreamReader(path)){while((awaitreader.ReadLineAsync())!=null){}}returnnull;}privatestaticvoidMain(){ButtonbuttonLoad=newButton{Text="LoadFile"};buttonLoad.Click+=asyncdel

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在正常情