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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5
Похожие ответы