У меня была та же проблема. Я попробовал все, но только на j-порте микрона на моем asus p5k у меня не было ошибок.
, Но когда я поместил диск в другой источник питания, он работал, и ошибки закончились. Затем я отложил диск к его исходному источнику питания, но новый разъем питания и это работали также.
Попытайтесь использовать локальную функцию в рамках метода перечислителя: переместите контент попытки.. поймайте к локальной функции, затем вызовите функцию из попытки.. выгода.
Используя Ваш пример:
public IEnumerable<string> YourFunction()
{
// do stuff...
try
{
// Move the try..catch content to the local function
return getStrings()
}
catch (Exception ex)
{
throw ExceptionMapper.Map(ex, file.FullName)
}
// The local function
IEnumerable<string> getStrings()
{
using (StreamReader stream = new StreamReader(file.OpenRead(), Encoding))
{
char[] buffer = new char[chunksize];
while (stream.Peek() >= 0)
{
int readCount = stream.Read(buffer, 0, chunksize);
yield return new string(buffer, 0, readCount);
}
}
}
}
Используя локальную функцию на самом деле хорошая идея в большом количестве случаев. Используя этот шаблон может вынудить метод сразу проверить аргументы вместо того, чтобы ожидать, пока вызывающая сторона не начинает перечисление ( Рослин, предупреждающий RCS1227).