草庐IT

SpringBoot中异步注解@Async介绍

全部标签

c# - 垃圾收集异步方法

我刚刚注意到关于垃圾收集的一些非常奇怪的事情。WeakRef方法按预期收集对象,而async方法报告对象仍然存在,即使我们已强制进行垃圾收集。有什么想法吗?classProgram{staticvoidMain(string[]args){WeakRef();WeakRefAsync().Wait();}privatestaticvoidWeakRef(){varfoo=newFoo();WeakReferencefooRef=newWeakReference(foo);foo=null;GC.Collect();Debug.Assert(!fooRef.IsAlive);}priva

c# - 为什么从 Async CTP/Release 中删除 "SwitchTo"?

我今天尝试使用SwitchTo方法切换到GUI线程,发现我从中提取它的示例不起作用,只是因为该方法不存在。然后我找到了这个简介here:Thereasonwegotridofitwasbecauseitwassodangerous.ThealternativeistobundleupyourcodeinsideTaskEx.Run...我的问题很简单:为什么它很危险?使用它会导致哪些具体危险?请注意,我确实阅读了该帖子的其余部分,因此我明白这里存在​​技术限制。我的问题仍然是,如果我知道这一点,为什么它危险?我正在考虑重新实现辅助方法以提供指定的功能,但如果有一些根本性的问题,除了有人

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

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

c# - 堆栈展开时嵌套异步方法中的堆栈溢出异常

我们有很多嵌套的异步方法,看到了我们并不真正理解的行为。以这个简单的C#控制台应用程序为例publicclassProgram{staticvoidMain(string[]args){try{varx=Test(index:0,max:int.Parse(args[0]),throwException:bool.Parse(args[1])).GetAwaiter().GetResult();Console.WriteLine(x);}catch(Exceptionex){Console.WriteLine(ex);}Console.ReadKey();}staticasyncTas

c# - 如何记录异步方法的异常?

带有XML文档的示例方法://summaryandparamtagsareherewhenyou'renotlooking.//////isnull.///publicvoidWrite(stringtext){if(text==null)thrownewArgumentNullException("text","Textmustnotbenull.");//syncstuff...}Write(null)按预期抛出异常。这是一个异步方法:publicasyncTaskWriteAsync(stringtext){if(text==null)thrownewArgumentNullEx

c# - 我可以阻止 MVC Core 中的异步代码吗?

我们都知道thefamousblogpost关于阻止StephenCleary的异步代码。在MVC5中,以下代码在请求Home/Index时会死锁:publicclassHomeController:Controller{publicstringIndex(){varmodel=AsyncMethod();returnmodel.Result;}privateasyncTaskAsyncMethod(){awaitTask.Run(()=>Thread.Sleep(2000));return"Hello";}}但是,完全相同的代码不会在MVC核心Web应用程序中死锁。响应返回Hello

c# - 异步等待文件创建

等待外部应用程序创建文件的最简洁方法是什么?asyncTaskdoSomethingWithFile(stringfilepath){//1.awaitforpathexists//2.Dosomethingwithfile} 最佳答案 因此,第一个关键点是您可以使用FileSystemWatcher在特定路径的文件系统事件更改时收到通知。例如,如果您希望在特定位置创建文件时收到通知,您可以找到。接下来,我们可以创建一个方法,该方法使用TaskCompletionSource在文件系统观察器触发相关事件时触发任务的完成。public

c# - 通过构建器模式使用异步任务

我目前使用构建器模式构建我的MVCView模型。varviewModel=builder.WithCarousel(),.WithFeaturedItems(3),.Build()我遇到的问题是当我必须对异步方法进行服务调用时。这意味着我的构建器方法必须返回Task而不是HomeViewModelBuilder.这阻止了我必须链接构建方法await他们。示例方法publicasyncTaskWithCarousel(){varcarouselItems=await_service.GetAsync();_viewModel.Carousel=carouselItems;returnth

c# - 使用 Async 避免重复代码

如何避免为异步和非异步方法编写两次相同的代码。我目前正在使用ASP.NET,所以我目前在请求线程上,我很快了解到他在代码下方(应该显示我的意图)绝对是错误的做法。应用程序死锁,因为await关键字试图返回到.Result阻塞的同一个线程。我这样做的全部原因是为了避免两次编写相同的“FindAll”代码。publicIEnumerableFindAll(){returnFindAllAsync().Result;}publicasyncTask>FindAllAsync(){returnawaitContext.Resources.ToListAsync();}那么如何解决这个问题呢?

c# - 异步任务<IEnumerable<T>> 抛出 "is not an iterator interface type"错误

仅当我使用async时,下面的代码才会抛出isnotaniteratorinterfacetypeawait并包装IEnumerable与任务。如果我删除asyncawait,它将与IEnumerable>一起使用.privateasyncTask>>GetTableDataAsync(CloudTablecloudTable,TableQuerytableQuery)whereT:ITableEntity,new(){TableContinuationTokencontineousToken=null;do{varcurrentSegment=awaitGetAzureTableDa