【发布时间】:2022-08-17 00:48:49
【问题描述】:
我有一个功能
public Task<IEnumerable<T>> GetVersionsAsync<T>(string key)
{
var request = GetVersionsRequestBuilder.Create(_databaseName, _collectionName).WithKey(key);
return Task.Run(() =>
{
var records = _myReader.GetAllVersionsForKey(request);
var returnValue = records.Select(record =>
{
var document = _mySerializer.Deserialize<T>(record.document);
return document;
});
return returnValue;
});
}
这是跳过第一个值并给出所有剩余结果
但是,如果我将 LINQ 部分更改为 ForEach,那么它会提供所有记录
var returnValue = new List<T>();
foreach (var record in records)
{
var document = _mySerializer.Deserialize<T>(record.document);
returnValue.Add(document);
}
return returnValue as IEnumerable<T>;
这是因为 LINQ 的 Select 投影在 Task.Run 内吗?
-
_myReader和_mySerializer是什么?这些线程安全性如何? -
这些是我的数据库读取器和序列化器,它们分别获取结果并对其进行反序列化。它们在 LINQ 和 ForEach sn-p 中是相同的。