我想知道是否可以从该方法中删除await,以免出现异步方法。
public static async Task Run(IMinioClient minio,
string bucketName = "my-bucket-name",
string prefix = null,
bool recursive = true,
bool versions = false)
{
try
{
Console.WriteLine("Running example for API: ListObjectsAsync");
var listArgs = new ListObjectsArgs()
.WithBucket(bucketName)
.WithPrefix(prefix)
.WithRecursive(recursive)
.WithVersions(versions);
await foreach (var item in minio.ListObjectsEnumAsync(listArgs).ConfigureAwait(false))
Console.WriteLine($"Object: {item.Key}");
Console.WriteLine($"Listed all objects in bucket {bucketName}\n");
}
catch (Exception e)
{
Console.WriteLine($"[Bucket] Exception: {e}");
}
}
https://github.com/minio/minio-dotnet/blob/master/Minio.Examples/Cases/ListObjects.cs
谢谢您的帮助。
通常我会执行 .Result 来执行此操作,但这里的等待是在 foreach 上完成的
在可以的情况下不使用异步执行是很奇怪的,但我会把它留给你。
如果您确实不需要使用
await
,这里是不使用它的实现。有点冗长,不像 await
那样干净,但就是这样。
首先,让我们定义返回
IAsyncEnumerable
的示例方法:
public static class TestClass
{
public static async IAsyncEnumerable<int> GetIntsAsync()
{
for (int i = 0; i < 10; i++)
{
await Task.Delay(100);
yield return i;
}
}
}
没有
await
的实现将是:
var asyncEnumerator = TestClass.GetIntsAsync().GetAsyncEnumerator();
try
{
while (asyncEnumerator.MoveNextAsync().AsTask().GetAwaiter().GetResult())
{
Console.WriteLine(asyncEnumerator.Current);
}
}
finally
{
asyncEnumerator?.DisposeAsync().AsTask().GetAwaiter().GetResult();
}