我正在尝试为IAsyncEnumerable<T>
集合创建一个自定义 DataReader,以便通过SqlBulkCopy
. 我正在按照这个问题中概述的代码示例和解决方案的行 -如何使用 SqlBulkCopy 编写 IAsyncEnumerable
这是我的 DataReader 的要点:
internal sealed class AsyncEnumerableDataReader<T> : IDataReader
{
private readonly IAsyncEnumerator<T> _asyncEnumerator;
private readonly List<PropertyInfo> _properties = new List<PropertyInfo>();
private bool _isClosed = false;
public AsyncEnumerableDataReader(IAsyncEnumerable<T> asyncEnumerable)
{
_asyncEnumerator = asyncEnumerable.GetAsyncEnumerator();
foreach (PropertyInfo propertyInfo in typeof(T).GetProperties(BindingFlags.Instance | BindingFlags.Public))
{
_properties.Add(propertyInfo);
}
}
//.... Other method implementations here
public bool Read() => _asyncEnumerator.MoveNextAsync().Result;
}
我的问题是,当我将 datareader 传递给SqlBulkCopy.WriteToServerAsync(reader)
方法时,在第一次调用DataReader.Read()
它时会引发以下错误:
System.InvalidOperationException: 'Operation is not valid due to the current state of the object.'
有谁知道我的代码哪里出错了?