Код, не выполняемый в итераторе IASYNCENUMERATEC#

Место общения программистов C#
Ответить
Anonymous
 Код, не выполняемый в итераторе IASYNCENUMERATE

Сообщение Anonymous »

Я испытываю странную проблему при перечислении iasyncenumerable , с системой. В моем итераторе у меня есть блок-финал с некоторыми значениями, полученными внутри блока Try , и некоторым кодом очистки внутри блока, наконец, . Код очистки находится внутри блока . Проблема в том, что любой код следует за блоком блокировки не выполняется. Нет исключения, код просто игнорируется, как будто его нет. Вот программа, которая воспроизводит это поведение: < /p>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

public class Program
{
static async Task Main()
{
await foreach (var item in GetStream().Take(1))
{
Console.WriteLine($"Received: {item}");
}
Console.WriteLine($"Done");
}

static async IAsyncEnumerable GetStream()
{
var locker = new object();
await Task.Delay(100);
try
{
yield return 1;
yield return 2;
}
finally
{
Console.WriteLine($"Finally before lock");
lock (locker) { /* Clean up */ }
Console.WriteLine($"Finally after lock");
}
}
}
< /code>

output: < /p>

Received: 1
Finally before lock
Done
< /code>

Текст "Наконец -то после блокировки" < /em> не печатается в консоли! Без оператора текст печатается, как и ожидалось. />
finally
{
try
{
lock (locker) { /* Clean up */ }
}
finally
{
Console.WriteLine($"Finally after lock");
}
}
< /code>

.net Core 3.1.3, .net Framework 4.8.4150.0, c# 8, system.linq.async 4.1.1, Visual Studio 16.5.4, приложение консоли < /p>

Подробнее здесь: https://stackoverflow.com/questions/615 ... in-finally
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»