我注意到在调试跟踪中我当前的方法正在触发 blob 上的 HEAD - 大概是为了检查它是否已经存在。我知道它永远不会,如果它确实存在我想覆盖。我只想直接 PUT 来缩短几毫秒,重要的是减少 Application Insights 应用程序映射中的噪音,其中 HTTP 404 错误显示为 Azure Blob 依赖项失败。
BlobHttpHeaders中没有选项,我也无法在BlobUploadOptions中找到任何此类覆盖选项。我缺少什么?
我想在一次调用中完成设置内容类型和标签的所有工作。我知道以下覆盖,但这将导致后续请求设置我想避免的内容类型和标签。
UploadAsync(Stream content, bool overwrite = false, CancellationToken cancellationToken = default)
Run Code Online (Sandbox Code Playgroud)
SDK 程序集 Azure.Storage.Blobs,版本=12.10.0.0
我当前的代码:
// blob settings
var options = new BlobUploadOptions()
{
// set content type
HttpHeaders = new BlobHttpHeaders()
{
ContentType = contentType,
ContentEncoding = "UTF-8"
},
// Set blob index tags
Tags = new Dictionary<string, string>
{
{ "quoteid", "123" },
{ "responseId","456" }
} …
Run Code Online (Sandbox Code Playgroud) 查看源代码,StopAsync 的默认超时时间为 5 秒。 WebHostBuilder提供了扩展方法UseShutdownTimeout方便设置。但是HostBuilder 不存在这样的等价物。
我知道我可能通过想要超过 5 秒的超时来滥用 HostBuilder 的意图,但它是一个很好的框架,用于管理一组相互依赖的作业。
我真的很感谢一些关于如何使用 HostBuilder 的指导,就像 UseShutdownTimeout 对 WebHostBuilder 所做的那样,同时仍然使用官方 NuGet 包。我看过可能扩展HostingAbstractionsHostBuilderExtensions但它是一个静态类......
下面的示例控制台应用程序用于触发 StopAsync OperationCanceledException 事件。只需在 10 秒之前按 Ctrl+C。
using System;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace StackOverflow_GenericHost_StopAsync
{
class Program
{
static async Task Main(string[] args)
{
var host = new HostBuilder()
.ConfigureServices((hostContext, services) =>
{
services.AddSingleton<IHostedService, MustRunToCompletionService>();
})
.Build();
await host.StartAsync();
try
{
await host.WaitForShutdownAsync();
}
catch (OperationCanceledException …
Run Code Online (Sandbox Code Playgroud)