草庐IT

Async-await

全部标签

c# - ThreadContextChanged 上的 AsyncLocal 值更新为 null

我正在尝试了解AsyncLocal在.Net4.6中的工作方式。我正在将一些数据放入AsyncLocal...但是当ThreadContext更改时它被设置为null。我使用AsyncLocal的全部原因是在等待异步操作时尝试跨线程保留/缓存此值。知道为什么会在上下文更改时专门调用它并将其设置为null吗?关于AsyncLocal的文档非常稀少……也许我完全弄错了。publicclassRequestContextProvider:IRequestContextProvider{privatestaticreadonlyAsyncLocal_requestContext=newAsyn

c# - Xamarin:不传播任务引发的异常

我在Xamarin中有以下代码(在ios中测试):privatestaticasyncTaskTaskWithException(){returnawaitTask.Factory.StartNew(()=>{thrownewException("Booo!");return"";});}publicstaticasyncTaskRunTask(){try{returnawaitTaskWithException();}catch(Exceptionex){Console.WriteLine(ex.ToString());throw;}}调用它作为awaitRunTask(),确实会从

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# - 使用 CancellationToken 取消 SQL Server 查询

我在SQLServer中有一个长时间运行的存储过程,我的用户需要能够取消它。我编写了一个小型测试应用程序,如下所示,它演示了SqlCommand.Cancel()方法工作得很好:privateSqlCommandcmd;privatevoidTestSqlServerCancelSprocExecution(){TaskFactoryf=newTaskFactory();f.StartNew(()=>{using(SqlConnectionconn=newSqlConnection("connStr")){conn.InfoMessage+=conn_InfoMessage;conn.

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