我得到了适用于 Minio: 的 C# .net 核心ListObjectsAsync 示例,但是如何将结果捕获到列表中而不是发布到控制台?
using System;
using Minio.DataModel;
namespace Minio.Examples.Cases
{
class ListObjects
{
// List objects matching optional prefix in a specified bucket.
public static void Run(Minio.MinioClient minio,
string bucketName = "my-bucket-name",
string prefix = null,
bool recursive = false)
{
try
{
Console.Out.WriteLine("Running example for API: ListObjectsAsync");
IObservable<Item> observable = minio.ListObjectsAsync(bucketName, prefix, recursive);
IDisposable subscription = observable.Subscribe(
item => Console.WriteLine("Object: {0}", item.Key),
ex => Console.WriteLine("OnError: {0}", ex),
() => Console.WriteLine("Listed all objects in bucket " + bucketName + "\n"));
// subscription.Dispose();
}
catch (Exception e)
{
Console.WriteLine("[Bucket] Exception: {0}", e);
}
}
}
}
我尝试修改订阅函数,以便将名称添加到列表中,而不是将它们打印到控制台:
IDisposable subscription = observable.Subscribe(
item => names.Add(item.Key),
ex => Console.WriteLine("OnError: {0}", ex),
() => Console.WriteLine("Listed all objects in bucket "
+ bucketName + "\n" + "count:" + names.Count +"\n"));
它打印 7,但如果我打印 names.Count 在订阅之外它打印 0;
这就是我想要做的:
List<Item> myList = new List<Item>(observable.ToList().Subscribe(x => Console.WriteLine("do something"),
ex => Console.WriteLine("OnError: {0}", ex),
() => Console.WriteLine("Done" + "\n"));
但是 observable 返回一个 IDisposable 所以这是不可能的。如何从 observable 转到 List ?或者我如何收集数据以便将其传递到 asp.net 核心视图中?
这有效 - 就像 svek 建议的那样使用 Wait 。直到我读到这个才意识到语法:waiting IObservable to get all elements error
List<Item> names = new List<Item>();
IDisposable subscription = observable.ToList().Subscribe(
x => names.AddRange(x),
ex => Console.WriteLine("OnError: {0}", ex),
() => Console.WriteLine("Done" + "\n") );
observable.Wait();
Console.WriteLine("out of subscribe count:" + names.Count + "\n");
subscription.Dispose();
return names;