C# 如何存储任务中的数据<;字符串>;串?

C# 如何存储任务中的数据<;字符串>;串?,c#,string,azure,azure-storage-blobs,azure-blob-storage,C#,String,Azure,Azure Storage Blobs,Azure Blob Storage,我需要读取容器中的txt.gz文件进行测试。现在它工作起来没有任何问题。 但是对于每个场景,我都多次调用这个方法。 是否可以将数据存储到字符串(或某物)中,而不是每次都读取数据?因为执行时间太长了。 我只想将数据作为字符串读取和存储一次。然后我可以多次使用这个字符串。可能吗 public async Task<string> GetTheBlobData(string blobName) { BlobContainerClient container

我需要读取容器中的txt.gz文件进行测试。现在它工作起来没有任何问题。 但是对于每个场景,我都多次调用这个方法。 是否可以将数据存储到字符串(或某物)中,而不是每次都读取数据?因为执行时间太长了。 我只想将数据作为字符串读取和存储一次。然后我可以多次使用这个字符串。可能吗

    public async Task<string> GetTheBlobData(string blobName)
    {
        BlobContainerClient container = new BlobContainerClient(connectionString,containerName);

        var blockBlob = container.GetBlobClient($"{blobName}");

        // Get the blob file as text
        using (var gzStream = await blockBlob.OpenReadAsync())
        {
            using (GZipStream decompressionStream = new GZipStream(gzStream, CompressionMode.Decompress))
            {
                using (StreamReader reader = new StreamReader(decompressionStream, Encoding.UTF8))
                {
                  return reader.ReadToEnd();
                }
            }
        }
    }
公共异步任务GetTheBlobData(字符串blobName)
{
BlobContainerClient容器=新的BlobContainerClient(connectionString,containerName);
var blockBlob=container.GetBlobClient($“{blobName}”);
//以文本形式获取blob文件
使用(var gzStream=await blockBlob.OpenReadAsync())
{
使用(GZipStream decompressionStream=新的GZipStream(gzStream,CompressionMode.Decompress))
{
使用(StreamReader=newstreamreader(解压缩流,Encoding.UTF8))
{
返回reader.ReadToEnd();
}
}
}
}
如果您所追求的是记忆化(意思是:缓存值并返回已知输入的预先存在的值),那么您可以尝试使用类似于使用并发字典的方法为每个正在运行的操作重复使用现有任务(
任务[])
可以等待任意次数,并且与线程相比非常健壮,但重要的是:不要使用
ValueTask[]
(只能等待一次)执行此操作:

类MyType
{
私有只读ConcurrentDictionary\u备忘
=新的ConcurrentDictionary();
公共任务GetTheBlobData(字符串blobName)
=>\u memonized.GetOrAdd(blobName,
静态(blob,obj)=>obj.GetTheBlobDataImpl(blob),this);
私有异步任务GetTheBlobDataImpl(字符串blobName)
{
//您现有的代码。。。
}
}
然而,请注意,这将使失败和成功同时成为记忆


(如果您没有使用C#9,只需删除
static
关键字;我使用它是为了确保没有任何捕获范围分配问题)

字符串mystringwillreuse=wait getheblobdata(“…”)?当然你已经知道怎么做了,那么你能把你的问题扩大一点吗?澄清一下:你的实际问题是:你想保留字符串以便在几个单元测试中使用它,而不是在每个测试中使用它。这是正确的吗?存储字符串就像等待方法和。。。存储字符串;如果你指的是更复杂的东西,比如momeoization-这有点棘手,因为
blobName
参数每次都可能不同,因此:你需要考虑
blobName
的可能值的数量-也就是说,在不放手的情况下重用东西就足够了吗?Fildor,是的,实际问题正是你所说的。Marc Gravell,将有一个每日blob,通过另一个创建方法,我可以得到每日blob的名称。我的问题,我的自动化框架,我需要txt blob数据很多次。当我每次使用“dataStr”((stringdatastr=GetTheBlobData(blobName.Result;))时,它从一开始就回放,读取血液,存储到字符串中等等。还是我错了?txt有三百万行,执行场景有点棘手。谢谢你,马克,记忆对我来说是一个新的话题。我如何从您的代码中获取字符串,很抱歉这个基本问题?@EmreKara与您之前的问题完全相同:
var blob=wait GetTheBlobData(“foo”)-只是现在它只在每个唯一的
blobName