gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 00:33:18 24 4
gpt4 key购买 nike

目前,我在 Azure SDK for .Net 版本 3.0.2-预发布版中遇到了一些基于任务的异步 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”仍然存在于云端(因为没有发送第二次删除请求),我必须通过门户手动删除它。

最佳答案

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

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

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

关于azure - Azure SDK for .NET 中基于任务的 API 中的并发性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24866751/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com