Дан текст, посчитать сумму байт в потоках - 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;