Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET Web API 2处理异步请求_C#_Asp.net_Asynchronous_Asp.net Web Api - Fatal编程技术网

C# ASP.NET Web API 2处理异步请求

C# ASP.NET Web API 2处理异步请求,c#,asp.net,asynchronous,asp.net-web-api,C#,Asp.net,Asynchronous,Asp.net Web Api,我试图确定当两个客户端同时调用我的Web API方法时会发生什么。为此,我在Python中生成了两个异步请求: rs = (grequests.post(url, data = json), grequests.post(url, data = json)) grequests.map(rs) 这些请求在我的WebApi中调用一个非异步方法,该方法正在更改我的资源,它是一个静态类实例。据我所知,API请求不应该同时运行,这正是我想要的,因为我不希望这两个请求相互干扰。但是,如果在API方法中设

我试图确定当两个客户端同时调用我的Web API方法时会发生什么。为此,我在Python中生成了两个异步请求:

rs = (grequests.post(url, data = json), grequests.post(url, data = json))
grequests.map(rs)
这些请求在我的WebApi中调用一个非异步方法,该方法正在更改我的资源,它是一个静态类实例。据我所知,API请求不应该同时运行,这正是我想要的,因为我不希望这两个请求相互干扰。但是,如果在API方法中设置断点,这两个请求似乎并行运行。这会导致一些不必要的结果,因为这两个请求正在并行地更改相同的资源


有没有办法确保Web API非并发地处理请求?

对Web API方法的请求由IIS应用程序线程池处理,该池为收到的每个同步请求初始化一个线程。无法告诉IIS非并发地运行这些线程

我相信您误解了什么是非异步Web API方法。当Web API方法为异步时,这意味着它将在处于等待状态时共享其应用程序池线程。这样做的优点是,其他请求不必初始化新线程,这有点昂贵。它还有助于最小化并发线程的数量,从而使应用程序池必须排队的线程数量最小化

对于非异步方法,IIS应用程序池将为每个请求初始化一个新线程,即使有非活动线程可用。而且,它不会与任何其他请求共享该线程


因此,您的问题的简短答案是否定的。没有办法确保Web API请求是非并发处理的。布赖恩·德里斯科尔的评论是正确的。您必须在请求期间锁定共享资源。

对Web API方法的请求由IIS应用程序线程池处理,该线程池为收到的每个同步请求初始化线程。无法告诉IIS非并发地运行这些线程

我相信您误解了什么是非异步Web API方法。当Web API方法为异步时,这意味着它将在处于等待状态时共享其应用程序池线程。这样做的优点是,其他请求不必初始化新线程,这有点昂贵。它还有助于最小化并发线程的数量,从而使应用程序池必须排队的线程数量最小化

对于非异步方法,IIS应用程序池将为每个请求初始化一个新线程,即使有非活动线程可用。而且,它不会与任何其他请求共享该线程


因此,您的问题的简短答案是否定的。没有办法确保Web API请求是非并发处理的。布赖恩·德里斯科尔的评论是正确的。您必须在请求期间锁定共享资源。

锁定共享资源。@BrianDriscoll请查看我的编辑。我已确保资源已被队列锁定,但请求之间仍存在干扰。Web API请求是否并发运行取决于API的宿主方式,而不是在代码中确定。如果您在IIS中运行,那么您的请求将由单独的工作进程并发处理。在不了解更多API的情况下,我认为您存在设计问题而不是实现问题。请锁定共享资源。@BrianDriscoll请查看我的编辑。我已确保资源已被队列锁定,但请求之间仍存在干扰。Web API请求是否并发运行取决于API的宿主方式,而不是在代码中确定。如果您在IIS中运行,那么您的请求将由单独的工作进程并发处理。在不了解更多API的情况下,我认为您有一个设计问题,而不是实现问题。