У меня есть NetworkStream, который я читаю асинхронно (используя async / await)
await Task<int>.Factory.FromAsync((cb, state) => stream.BeginRead(buffer, offset, readLen - offset), stream.EndRead, null);
К сожалению, иногда возникает исключение io: «Операция ввода-вывода была прервана из-за выхода из потока или запроса приложения».
Я считаю, что выполнил требование, задокументированное в Socke.EndReceive: http://msdn.microsoft.com/en-us/library/w7wtt64b.aspx. Который гласит:
Все операции ввода-вывода, инициированные данным потоком, отменяются, когда этот поток
выходы. Ожидание асинхронной операции может завершиться неудачей, если поток завершается
до завершения операции.
Поскольку асинхронный метод выполняется в планировщике по умолчанию, это требование не может быть обеспечено.
Есть ли способ обойти это? Нужно ли запускать отдельный поток для запуска ввода-вывода?
С наилучшими пожеланиями, Дирк