-
Notifications
You must be signed in to change notification settings - Fork 4.8k
/
StorageExtensions.cs
53 lines (51 loc) · 2.57 KB
/
StorageExtensions.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
using System;
using System.Collections.Generic;
using System.Threading;
using Azure.Core;
using Azure.Core.Pipeline;
namespace Azure.Storage
{
/// <summary>
/// Extensions and utilities for Azure Storage clients.
/// </summary>
public static class StorageExtensions
{
/// <summary>
/// Allows you to specify a server timeout for any Storage operations executing on this thread for the duration of the scope.
///
/// For more information, see
/// <see href="https://docs.microsoft.com/rest/api/storageservices/setting-timeouts-for-blob-service-operations">
/// Setting timeouts for Blob service operations</see>,
/// <see href="https://docs.microsoft.com/rest/api/storageservices/setting-timeouts-for-file-service-operations">
/// Setting timeouts for File service operations</see>,
/// <see href="https://docs.microsoft.com/rest/api/storageservices/setting-timeouts-for-queue-service-operations">
/// Setting timeouts for Queue service operations</see>.
/// </summary>
/// <param name="timeout">The server timeout for each HTTP request.</param>
/// <returns>The <see cref="IDisposable"/> instance that needs to be disposed when server timeout shouldn't be used anymore.</returns>
/// <example>
/// Sample usage:
/// <code snippet="Snippet:Sample_StorageServerTimeout" language="csharp">
/// BlobServiceClient client = new BlobServiceClient(connectionString, options);
/// using (StorageExtensions.CreateServiceTimeoutScope(TimeSpan.FromSeconds(10)))
/// {
/// client.GetProperties();
/// }
/// </code>
/// </example>
/// <remarks>
/// The server timeout is sent to the Azure Storage service for each REST request made within the scope.
/// This value is not tracked or validated on the client, it is only passed to the Storage service.
///
/// Consider passing a <see cref="CancellationToken"/> to client methods
/// and properly sizing <see cref="RetryOptions.NetworkTimeout"/> when configuring storage clients
/// as prefered way of enforcing upper boundary of execution time.
/// </remarks>
public static IDisposable CreateServiceTimeoutScope(TimeSpan? timeout)
{
return HttpPipeline.CreateHttpMessagePropertiesScope(new Dictionary<string, object> { { Constants.ServerTimeout.HttpMessagePropertyKey, timeout } });
}
}
}