Дан текст, посчитать сумму байт в потоках - C#

Узнай цену своей работы

Формулировка задачи:

Объясните что не так с кодом Дан текст, посчитать сумму байт в потоках. Function() считывает байты и передает их в Summa(), там они считаются, запуск идет из Main() Компилятор выдает ошибку: Исключение типа "System.InvalidOperationException" возникло в System.dll, но не было обработано в коде пользователя Дополнительные сведения: Аргумент collection пуст и был помечен как завершенный с учетом добавлений. Вот код:
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.IO;
  6. using System.Threading.Tasks;
  7. using System.Threading;
  8. using System.Collections.Concurrent;
  9. namespace Л.Р._2_Многопоточность
  10. {
  11. class Program
  12. {
  13. static BlockingCollection<int> bc;
  14. static void Function()
  15. {
  16. var text = "";
  17. using (StreamReader sr = new StreamReader("1.txt", Encoding.GetEncoding(1251)))
  18. {
  19. text = sr.ReadToEnd();
  20. }
  21. for (int i = 0; i < text.Length; i++)
  22. {
  23. if (text[i] != '\r')
  24. {
  25. bc.Add(text[i]);
  26. Console.WriteLine(text[i]);
  27. }
  28. }
  29. bc.CompleteAdding();
  30. Console.WriteLine("Результат");
  31. }
  32. static void Summa()
  33. {
  34. int n, summ=0;
  35. while(!bc.IsCompleted)
  36. {
  37. if (bc.TryTake(out n))
  38. summ += bc.Take();
  39. Console.WriteLine("{0}", summ);
  40. }
  41. }
  42. static void Main(string[] args)
  43. {
  44. bc=new BlockingCollection<int>();
  45. Task func=new Task(Function);
  46. Task summ = new Task(Summa);
  47. func.Start();
  48. summ.Start();
  49. try
  50. {
  51. Task.WaitAll(func, summ);
  52. }
  53. catch (AggregateException exc)
  54. {
  55. Console.WriteLine(exc);
  56. }
  57. finally
  58. {
  59. func.Dispose();
  60. summ.Dispose();
  61. bc.Dispose();
  62. }
  63. Console.ReadLine();
  64. }
  65. }
  66. }

Решение задачи: «Дан текст, посчитать сумму байт в потоках»

textual
Листинг программы
  1. if (bc.TryTake(out n))
  2. summ += n;

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


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

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

5   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы