Используя урожай для итерации по datareader не мог бы закрыть соединение?

Во вкладке «Файлы» вашего проекта вам нужно найти файл project.properties. Там вы должны искать java.fx.deploy.includeDT = TRUE , установить это значение в False.

Смотрите это: http://hongouru.blogspot.com/2015/09/solved-error-building-new-project-using.html

15
задан Joel Gauvreau 6 September 2008 в 14:53
поделиться

4 ответа

Итератор, что синтезы компилятора реализуют IDisposable, который называет foreach, когда из цикла foreach выходят.

Итератор Располагает (), метод очистит операторы использования на раннем выходе.

, пока Вы используете итератор в цикле foreach, с помощью () блок, или называете Расположение () метод некоторым другим способом, очистка Итератора произойдет.

12
ответ дан 1 December 2019 в 04:18
поделиться

Соединение будет закрыто автоматически, так как Вы используете его в "использовании" блока.

2
ответ дан 1 December 2019 в 04:18
поделиться

Судя от это техническое объяснение , Ваш код не будет работать как ожидалось, но прерываться на втором объекте, потому что соединение было уже закрыто при возврате первого объекта.

@Joel Gauvreau: Да, я должен был продолжать читать. Часть 3 этого ряда объясняет, что компилятор добавляет специальную обработку для наконец блоков для инициирования только в реальный конец.

0
ответ дан 1 December 2019 в 04:18
поделиться

От простого теста я попробовал, aku является правильным, расположите, назван как только foreach выход блока.

@David: Однако стек вызовов сохранен между вызовом, таким образом, соединение не было бы закрыто, потому что на следующем вызове мы возвратимся к следующей инструкции после урожая, который является в то время как блок.

Мое понимание - то, что, когда итератор расположен, соединение было бы также расположено с ним. Я также думаю что Соединение. Близко не был бы необходим, потому что это будет заботиться о том, когда объект будет расположен из-за пункта использования.

Вот простая программа, я пытался протестировать поведение...

class Program
{
    static void Main(string[] args)
    {
        foreach (int v in getValues())
        {
            Console.WriteLine(v);
        }
        Console.ReadKey();

        foreach (int v in getValues())
        {
            Console.WriteLine(v);
            break;
        }
        Console.ReadKey();
    }

    public static IEnumerable<int> getValues()
    {
        using (TestDisposable t = new TestDisposable())
        {
            for(int i = 0; i<10; i++)
                yield return t.GetValue();
        }
    }
}

public class TestDisposable : IDisposable
{
    private int value;

    public void Dispose()
    {
        Console.WriteLine("Disposed");
    }

    public int GetValue()
    {
        value += 1;
        return value;
    }
}
2
ответ дан 1 December 2019 в 04:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: