gpt4 book ai didi

.net - 使用 Datetime.Now 具有不同文件名的 TPL

转载 作者:行者123 更新时间:2023-12-04 05:18:28 24 4
gpt4 key购买 nike

我正在使用任务将多个文件上传到 sftp 服务器。但目前正在发生的是,当多个任务并行执行时,正在生成相同的“文件名”。我想确保每次都生成一个不同的文件名。

//Simplified version of my code:
processingTasks = 1000;
while (processingTasks > 0)
{
processingTasks --;
Task<string> task = Task<string>.Factory.StartNew(() =>
{
string fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + ".txt";
return UploadFileToSFTP(fileName, fileContent);
});
}

以下对我有用,给我不同的日期时间文件名还是有更好的方法来做到这一点?
processingTasks = 1000;
while (processingTasks > 0)
{
processingTasks --;
Task<string> task = Task<string>.Factory.StartNew(() =>
{
lock(file) //Will only one task go inside this at a time?
{
Thread.Sleep(1000);
string fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + ".txt";
}

return UploadFileToSFTP(fileName, fileContent);
});
}

最佳答案

您可以使用 Emile 的想法来生成“唯一时间戳”: return DateTime.Now如果这个时间还没有返回,否则在 future 返回第一个免费的第二个。

这样,你会得到一个错误的时间戳,少量(或大量,如果你长时间每秒调用此方法多次),但这意味着你不必等待,感觉对我来说很脆弱。

在代码中:

public static class UniqueTimestamp
{
private static readonly object Lock = new object();
private static DateTime LastTimestamp = DateTime.MinValue;

private static DateTime RoundToSecond(DateTime dt)
{
return new DateTime(dt.Year, dt.Month, dt.Day,
dt.Hour, dt.Minute, dt.Second);
}

public static DateTime GetTimestamp()
{
var now = RoundToSecond(DateTime.Now);
DateTime timestamp;
lock (Lock)
{
if (now > LastTimestamp)
timestamp = now;
else
timestamp = LastTimestamp.AddSeconds(1);
LastTimestamp = timestamp;
}
return timestamp;
}
}

关于.net - 使用 Datetime.Now 具有不同文件名的 TPL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13945981/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com