C# .net5 api并发怎么样

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# .net5 api并发怎么样相关的知识,希望对你有一定的参考价值。

参考技术A 高并发系统设计的目标有三个:高性能、高可用,以及高可扩展。
高性能:性能体现了系统的并行处理能力,在有限的硬件投入下,提高性能意味着节省成本。优化用户的体验,响应时间分别是100毫秒、1秒、3秒,给用户的感受是完全不同的。
高可用:表示系统可以正常服务的时间。对于高并发系统,最基本的要求能做到3个9以上,像一些大公司每年动辄千亿以上的GMV,1%(2个9)不可服务就是10亿级别的业务影响。
高扩展:表示系统的扩展能力,流量高峰时能否在短时间内完成扩容,更平稳地承接峰值流量,比如双11活动、郑-爽-代-孕等热点事件。

Azure SDK for .NET 中基于任务的 API 中的并发性

【中文标题】Azure SDK for .NET 中基于任务的 API 中的并发性【英文标题】:Concurrency in the Task-based API in Azure SDK for .NET 【发布时间】:2014-09-12 01:20:38 【问题描述】:

我目前在用于 .Net 版本 3.0.2-prerelease 的 Azure SDK 中的基于任务的异步 API 存在一些并发问题。

我有一个网站名称列表

var webSites = new []  "website1", "website2" ;

从中,我使用基于任务的 API 来创建或删除网站。两者偶尔都会失败:

await Task.WhenAll(webSites.Select(x => webSiteClient.WebSites.CreateAsync(
    "westeuropewebspace",
    new WebSiteCreateParameters
    
        SiteMode = WebSiteMode.Limited,
        ComputeMode = WebSiteComputeMode.Shared,
        Name = x
        WebSpaceName = "something"
    
)));

很少,我收到一个异常,抱怨服务器场“Default1”已经存在。我知道这个服务器场是为免费网站隐式创建的,但目前没有办法在创建网站之前通过 API 创建这个服务器场(只有“DefaultServerFarm”可以)。

删除时,会发生类似情况:

await Task.WhenAll(webSites.Select(x => webSiteClient.WebSites.DeleteAsync(
    "westeuropewebspace",
    x,
    new WebSiteDeleteParameters
    
        DeleteAllSlots = true,
        DeleteEmptyServerFarm = true,
        DeleteMetrics = true,
    
)));

通常(大约每隔一次),我得到一个“website2”无法找到的异常,尽管它确实存在。不过,该网站已被删除。

更新: 我已将第二个 Task.WaitAll 序列化为一个 foreach 循环,但仍然出现异常。现在唯一的区别是,当删除“website1”失败时,“website2”仍然存在于云端(因为没有发送第二次删除请求),我必须通过门户手动删除它。

【问题讨论】:

【参考方案1】:

你是对的 - 创建站点 api 还尝试隐式创建服务器场,如果同时调用可能会导致冲突。更安全的方法是使用 API 显式创建服务器场,然后在创建网站时使用该服务器场。这样,您就可以显式控制站点到服务器场的放置,并且不会隐式创建服务器场。

Azure SDK API 包含一种显式创建服务器场的方法。

https://github.com/Azure/azure-sdk-for-net/blob/master/src/WebSiteManagement/Generated/ServerFarmOperations.cs

【讨论】:

grmbl:我已经在使用 API 创建“该”服务器场,但目前无法创建立即链接到该服务器场的网站(即使您在 WebSiteCreateParameters 中指定“DefaultServerFarm”,它们最终为“免费”)。您必须创建它们然后更新以获得“共享”网站。另一方面,API 无法为“免费”网站创建“Default1”服务器场,因此您最终无法在以任何方式同时创建网站之前创建所需的服务器场。 嗨,Kai,不幸的是,如果使用较旧的 API 版本,这就是 API 的工作方式。我相信 SDK 尚未更新为使用最新的 API 版本。在旧 API 版本中创建站点时,三个参数控制站点到服务器场的位置:ComputeMode、SiteMode、ServerFarm。在较新的 API 版本中,ComputeMode 和 SiteMode 被忽略。创建站点时,您是否可以尝试将 ComputeMode 指定为“专用”?这样,站点的 computeMode 将与 serverFarm 的 computeMode 匹配,因此应该正确放置站点。

以上是关于C# .net5 api并发怎么样的主要内容,如果未能解决你的问题,请参考以下文章

(72)C#里怎么样调用WIN API的函数

(74)C#里怎么样调用WIN API的函数时实现回调函数

Python3 加C# 并发编程!强强组合!会产生什么样的化学反应?

(73)C#里怎么样调用WIN API的函数时传送结构或指针对象

[实用] 为app提供api,架构该怎么设计,需要考虑高并发,访问量比较大

使用 IdentityServer 和 C# 保护 API