все ко всем,
У меня есть приложение, которое использует несколько веб-сервисов. Что делает это приложение, так это то, что оно получает много пользователей и создает записи в файле .csv для различных проектов.
Я хотел бы сделать выполнение для определенного количества пользователей, каждые 100 или 200 пользователей приложение ждет около 30 секунд и продолжает свое выполнение.
Пусть это будет сделано до тех пор, пока выполнение не будет завершено.
Я хочу избежать загрузки запросов к базе данных и предотвратить насыщение трафика из-за того, что я делаю несколько веб-вызовов.
Как я могу это сделать?
Заранее большое спасибо.
Вот часть моего кода:
UserData[] userIds = GetUserID();
if (userIds.Length > 0)
{
List<string> multiUserIDs = new List<string>();
foreach (var userdata in userIds)
{
multiUserIDs.Add(userdata.List[0].ToString());
}
string testName = "test_";
string outCsvFile = string.Format(@"D:\\TasksForAllProjects\\{0}.csv", testName + DateTime.Now.ToString("_yyyyMMdd HHmms"));
String newLine = "";
var stream = File.CreateText(outCsvFile);
stream.WriteLine("ProjectName,UserFirstName,UserLastName,TaskStatus);
string temp = "";
var AllProjectIds = proj.ProjectID; //Esto viene de otra llamada hecha mas arriba
string[] projectIDs = new string[] { AllProjectIds }; // all projects
string singleUserID = "";
string[] taskStatus = new string[] { "notcompleted" };
TaskEntry[] result = GetTasks(projectIDs, singleUserID, multiUserIDs.ToArray(),taskStatus);
newLine = string.Format("\"{0}\",\"{1}\",\"{2}\"",
item.ProjectTitle,
item.UserID,
status);
//Creating a new file when new entries are found.
stream.WriteLine(newLine);
}
stream.Close();
Я вижу, что проблема может исходить из переменной , в multiUserIDs
которой есть все пользователи.
Таким образом, он должен запускаться от числа пользователей, которое исходит от этой переменной.
вы должны спать нить:
Параметр, который он получает, находится в миллисекундах.
Однако делать это иногда не очень хорошая идея, и вы должны спросить себя, почему вам приходится так долго приостанавливать работу приложения. Если это то, что будет поддерживаться с течением времени, вам следует рассмотреть другой дизайн.
Если вы создаете csv, не делайте этого так, используйте библиотеку, например
CsvHelper
затем вы можете отобразить все данные, не проходя запись за записью.
Я так понимаю у вас класс в переменной
result
в таком случае экспорт прямойБолее того, если вы проанализируете документацию, вы сможете настроить сопоставление и сгенерировать файл за одну операцию, таким образом, вам не придется использовать какую-либо остановку кода.
>> если я выполняю вызов большую часть времени, у меня есть тайм-аут или зависание базы данных
Я не понимаю, как вы восстанавливаете записи, но эта проблема заключается не в создании csv, а в том, как вы восстанавливаете данные, возможно, вам следует оценить использование
DataReader
Но остановка кода не кажется мне хорошей альтернативой.