Дан текст, посчитать сумму байт в потоках - 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;
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д