Дан текст, посчитать сумму байт в потоках - C#
Формулировка задачи:
Объясните что не так с кодом
Дан текст, посчитать сумму байт в потоках.
Function() считывает байты и передает их в Summa(), там они считаются, запуск идет из Main()
Компилятор выдает ошибку:
Исключение типа "System.InvalidOperationException" возникло в System.dll, но не было обработано в коде пользователя
Дополнительные сведения: Аргумент collection пуст и был помечен как завершенный с учетом добавлений.
Вот код:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Threading.Tasks; using System.Threading; using System.Collections.Concurrent; namespace Л.Р._2_Многопоточность { class Program { static BlockingCollection<int> bc; static void Function() { var text = ""; using (StreamReader sr = new StreamReader("1.txt", Encoding.GetEncoding(1251))) { text = sr.ReadToEnd(); } for (int i = 0; i < text.Length; i++) { if (text[i] != '\r') { bc.Add(text[i]); Console.WriteLine(text[i]); } } bc.CompleteAdding(); Console.WriteLine("Результат"); } static void Summa() { int n, summ=0; while(!bc.IsCompleted) { if (bc.TryTake(out n)) summ += bc.Take(); Console.WriteLine("{0}", summ); } } static void Main(string[] args) { bc=new BlockingCollection<int>(); Task func=new Task(Function); Task summ = new Task(Summa); func.Start(); summ.Start(); try { Task.WaitAll(func, summ); } catch (AggregateException exc) { Console.WriteLine(exc); } finally { func.Dispose(); summ.Dispose(); bc.Dispose(); } Console.ReadLine(); } } }
Решение задачи: «Дан текст, посчитать сумму байт в потоках»
textual
Листинг программы
if (bc.TryTake(out n)) summ += n;
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д