Я попытался создать объект чтения потоков (sr
) внутри параллели для l oop. Это работает, но требуется 1,3 минуты для извлечения данных, которые должны были быть получены менее чем за 4 секунды. Проблема, как я надеюсь, где-то связана с этим StreamReader
объектом. При попытке с приведенным ниже кодом я получаю сообщение об ошибке, которое я пытался решить многими способами, но в настоящее время очень сильно застрял на нем. Даже использованные параллельные пакеты, volatile
, ThreadStatic
и lock
.
static void Main(string[] args)
{
Task.Run(() =>
{
Thread th0 = new Thread(() => ReadAllLinesAsync(
@"C:\Users\Administrator\Desktop\Fnale mail\LineDataBackHigh.csv"));
th0.Start();
th0.Join();
watch.Stop();
Debug.Log("time=" + watch.Elapsed);
Debug.Log("Finished Task + ");
});
Debug.Log("Free Executed, Task Independent");
}
public static string[] ReadAllLinesAsync(string path)
{
ConcurrentBag<string> lines = new ConcurrentBag<string>();
// Open the FileStream with the same FileMode, FileAccess
// and FileShare as a call to File.OpenText would've done.
using (StreamReader sr = File.OpenText(path))
{
string line = String.Empty;
int k = 0;
sr8 = sr;
Thread th0 = new Thread(Fetch);
th0.Start();
th0.Join();
Debug.Log("Finished Reading2" + lines.Count);
int item = 1;
void Fetch()
{
Parallel.For(k, File.ReadLines(path).Count(), z =>
{
sr8 = sr;
Debug.Log("Executing");
lines.Add(sr8.ReadLine());
// sr.Dispose();
});
}
}
return lines.ToArray();
}
Ошибка: