草庐IT

Async-await

全部标签

c# - 为什么 ConfigureAwait(false) 不是默认选项?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭8年前。Improvethisquestion如您所知,在不需要捕获同步上下文的代码中等待任务时调用Task.ConfigureAwait(false)是个好主意,因为它可以causedeadlocks否则。那么,您需要多久捕获一次同步上下文?我很少练习。在大多数情况下,我使用的“库”代码几乎迫使我一直使用Task.ConfigureAwait(false)。所以我的问题很简单:为什么Task.ConfigureAwait(false

c# - 为什么 ConfigureAwait(false) 不是默认选项?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭8年前。Improvethisquestion如您所知,在不需要捕获同步上下文的代码中等待任务时调用Task.ConfigureAwait(false)是个好主意,因为它可以causedeadlocks否则。那么,您需要多久捕获一次同步上下文?我很少练习。在大多数情况下,我使用的“库”代码几乎迫使我一直使用Task.ConfigureAwait(false)。所以我的问题很简单:为什么Task.ConfigureAwait(false

c# - 调试器不会因异步方法中的异常而中断/停止

当调试器附加到.NET进程时,它(通常)会在抛出未处理的异常时停止。但是,当您使用async方法时,这似乎不起作用。我之前尝试过的场景列在下面的代码中:classProgram{staticvoidMain(){//DebuggerstoppscorrectlyTask.Run(()=>SyncOp());//Debuggerdoesn'tstopTask.Run(async()=>SyncOp());//Debuggerdoesn'tstopTask.Run((Func)AsyncTaskOp);//Debuggerstopson"Wait()"with"AggregateExcep

c# - 调试器不会因异步方法中的异常而中断/停止

当调试器附加到.NET进程时,它(通常)会在抛出未处理的异常时停止。但是,当您使用async方法时,这似乎不起作用。我之前尝试过的场景列在下面的代码中:classProgram{staticvoidMain(){//DebuggerstoppscorrectlyTask.Run(()=>SyncOp());//Debuggerdoesn'tstopTask.Run(async()=>SyncOp());//Debuggerdoesn'tstopTask.Run((Func)AsyncTaskOp);//Debuggerstopson"Wait()"with"AggregateExcep

c# - 我为什么要费心使用 Task.ConfigureAwait(continueOnCapturedContext : false);

考虑以下窗口窗体代码:privateasyncvoidUpdateUIControlClicked(objectsender,EventArgse){this.txtUIControl.Text="Iwillbeupdatedafterawait-ihope!";awaitTask.Delay(5000).ConfigureAwait(continueOnCapturedContext:false);this.txtUIControl.Text="Iamupdatednow.";}这里在第3行抛出异常,因为在await之后代码在非UI线程上执行。ConfigureAwait(false

c# - 我为什么要费心使用 Task.ConfigureAwait(continueOnCapturedContext : false);

考虑以下窗口窗体代码:privateasyncvoidUpdateUIControlClicked(objectsender,EventArgse){this.txtUIControl.Text="Iwillbeupdatedafterawait-ihope!";awaitTask.Delay(5000).ConfigureAwait(continueOnCapturedContext:false);this.txtUIControl.Text="Iamupdatednow.";}这里在第3行抛出异常,因为在await之后代码在非UI线程上执行。ConfigureAwait(false

c# - 使用 ConfigureAwait(false) 和 Task.Run 有什么区别?

我知道建议对库代码中的await使用ConfigureAwait(false),这样后续代码就不会在调用者的执行上下文中运行,这可能是一个UI线程。我也明白,出于同样的原因,应该使用awaitTask.Run(CpuBoundWork)而不是CpuBoundWork()。ConfigureAwait示例publicasyncTaskLoadPage(Uriaddress){using(varclient=newHttpClient())using(varhttpResponse=awaitclient.GetAsync(address).ConfigureAwait(false))us

c# - 使用 ConfigureAwait(false) 和 Task.Run 有什么区别?

我知道建议对库代码中的await使用ConfigureAwait(false),这样后续代码就不会在调用者的执行上下文中运行,这可能是一个UI线程。我也明白,出于同样的原因,应该使用awaitTask.Run(CpuBoundWork)而不是CpuBoundWork()。ConfigureAwait示例publicasyncTaskLoadPage(Uriaddress){using(varclient=newHttpClient())using(varhttpResponse=awaitclient.GetAsync(address).ConfigureAwait(false))us

c# - 异步 Task.WhenAll 超时

在新的异步dotnet4.5库中有没有办法在Task.WhenAll上设置超时?方法?我想获取多个源,并在5秒后停止,并跳过未完成的源。 最佳答案 您可以使用Task.WhenAny()将生成的Task与Task.Delay()结合起来:awaitTask.WhenAny(Task.WhenAll(tasks),Task.Delay(timeout));如果您想在超时的情况下收获已完成的任务:varcompletedResults=tasks.Where(t=>t.Status==TaskStatus.RanToCompletion

c# - 异步 Task.WhenAll 超时

在新的异步dotnet4.5库中有没有办法在Task.WhenAll上设置超时?方法?我想获取多个源,并在5秒后停止,并跳过未完成的源。 最佳答案 您可以使用Task.WhenAny()将生成的Task与Task.Delay()结合起来:awaitTask.WhenAny(Task.WhenAll(tasks),Task.Delay(timeout));如果您想在超时的情况下收获已完成的任务:varcompletedResults=tasks.Where(t=>t.Status==TaskStatus.RanToCompletion