相关疑难解决方法(0)

最大并发HttpWebRequests数

我正在对一个Web应用程序进行压力测试,并设置了一个Windows测试程序,该程序可以旋转多个线程并在每个线程上发出Web请求.

问题是我得到以下输出:

01/09/09 11:34:04 Starting new HTTP request on 10
01/09/09 11:34:04 Starting new HTTP request on 11
01/09/09 11:34:04 Starting new HTTP request on 13
01/09/09 11:34:05 Starting new HTTP request on 14
01/09/09 11:34:05 Starting new HTTP request on 11
01/09/09 11:34:05 11 has finished!
01/09/09 11:34:05 Starting new HTTP request on 13
01/09/09 11:34:05 13 has finished!
01/09/09 11:34:05 Starting new HTTP request on 14
01/09/09 11:34:05 14 has finished!
01/09/09 11:34:05 Starting new HTTP request on …
Run Code Online (Sandbox Code Playgroud)

.net multithreading httpwebrequest

62
推荐指数
4
解决办法
6万
查看次数

ASP.NET中的ConfigureAwait(false)的行为是什么?

我试图理解ConfigureAwait(false)ASP.NET中的行为.特别是如果我没有await结果.我的意思的一个例子:

var result = DoSomethingAsync().ConfigureAwait(false);

// do some things other things here. Is our task executing simultaneously?

await result;
Run Code Online (Sandbox Code Playgroud)

从我所读到的,在ASP.NET(不是核心)的上下文中,我理解:

  • ConfigureAwait(false)将阻止在返回应用程序流时重新创建上下文.如果未指定,则仍可以在与原始文件不同的线程上恢复上下文.
  • ConfigureAwait(false)将使用默认的线程池调度程序,并且AspNetSynchronizationContext将不再涉及.
  • 在ASP.NET(非核心)中,AspNetSynchronizationContext确保所有任务按顺序运行(不是并行运行),但每个任务可以在不同的线程上运行.
  • 在单个请求的上下文中进行并行执行是不可取的,因为它会影响ASP.NET线程池启发式,而并行化则以处理并行请求的形式出现.使用任务可防止在IO操作期间阻止线程.

假设我所说的一切都是正确的,上面的代码示例会发生什么?从我所读到的,这段代码将导致并行化.如果这是真的,那么这会被认为是非常危险的ASP.NET,每个请求窃取多个线程?

如果不是这样,为什么不呢?什么是同步任务AspNetSynchronizationContext之后不再涉及给定ConfigureAwait(false)

更新:

在我的第三点使用"顺序"这个词是不正确的.我应该说的是"任务将一次运行一个".对我而言,这意味着不是平行的.这取自本文中的信息.下表三分之二描述了每个同步上下文的功能.ASP.NET同步上下文一次执行一个任务.https://msdn.microsoft.com/en-us/magazine/gg598924.aspx

鉴于ConfigureAwait(false)将继续执行远离ASP.NET同步上下文并执行默认上下文(一次不执行一个),这是否可能(但不一定)导致请求使用超过一个线程同时

或者我在这里完全误解了什么?

更新2:

我在下面问了一个更简洁的问题:

在ASP.NET Classic中,ConfigureAwait(false)会导致continuation在多个线程上并行执行吗?

.net c# asp.net multithreading task

5
推荐指数
1
解决办法
583
查看次数

标签 统计

.net ×2

multithreading ×2

asp.net ×1

c# ×1

httpwebrequest ×1

task ×1