- How to redirect output in an app run on mono (c#) on Linux to avoid 'Array index is out of range.' when multiple threads write to console?
- FileStream fsOut = new FileStream(filename, FileMode.Append, FileAccess.Write);
- swOut = new StreamWriter(fsOut);
- Console.SetOut(swOut);
- Console.SetError(swOut);
- private StreamWriter _swOut = null;
- [TestCase(100, "output.txt")]
- public void RawThreadsTests(int howMany, string filename) {
- FileStream fsOut = new FileStream(filename, FileMode.Append, FileAccess.Write);
- _swOut = new StreamWriter(fsOut);
- Console.SetOut(_swOut);
- Console.SetError(_swOut);
- Thread[] threads = new Thread[howMany];
- Container c = TestContainer;
- for(int i = 0; i < howMany; i++) {
- threads[i] = new Thread(unused => Write());
- threads[i].Start();
- }
- //Wait for all threads
- for(int i = 0; i < howMany; i++) {
- threads[i].Join();
- }
- }
- static void Write() {
- Console.WriteLine("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
- }
- (..).RawThreadsTests(100,"output.txt") : System.IndexOutOfRangeException: Array index is out of range.
- at System.IO.StreamWriter.LowLevelWrite (System.String s) [0x00000] in :0
- at System.IO.StreamWriter.Write (System.String value) [0x00000] in :0
- at System.IO.TextWriter.WriteLine (System.String value) [0x00000] in :0
- at System.Console.WriteLine (System.String value) [0x00000] in :0
- (..).RawThreadsTests(100,"output.txt") : System.ArgumentException: Reading would overrun buffer
- at System.IO.FileStream.Write (System.Byte[] array, Int32 offset, Int32 count) [0x00000] in :0
- at System.IO.StreamWriter.FlushBytes () [0x00000] in :0
- at System.IO.StreamWriter.Decode () [0x00000] in :0
- at System.IO.StreamWriter.LowLevelWrite (System.String s) [0x00000] in :0
- at System.IO.StreamWriter.Write (System.String value) [0x00000] in :0
- at System.IO.TextWriter.WriteLine (System.String value) [0x00000] in :0
- at System.Console.WriteLine (System.String value) [0x00000] in :0