Шлюхи без блекджека, блекджек без шлюх. Войти !bnw Сегодня Клубы
Привет, TbI — HRWKA! 1247.0 пользователей не могут ошибаться!
?7005
прекрасное6454
говно5922
говнорашка5512
хуита4737
anime3078
linux2663
music2646
bnw2607
рашка2587
log2372
ололо2258
дунч1879
pic1816
сталирасты1494
bnw_ppl1456
быдло1441
украина1439
дыбр1239
гімно1158

У меня вопрос, но начну с введение в то как я до него дошёл.
Допустим, у нас есть какой-то коллбэк, в качестве примера возьмём FutureCallback из всячески уважаемой мной библиотеки HttpCore.
Допустим также, что мы угорели по асинхронности и поэтому после того как коллбэк завершил свою работу, мы хотим сообщить об этом куда следует. Например, чтобы там новый запрос запустили или ещё чего.
Наивная имплементация будет выглядеть примерно так:

public class CompletingFutureCallback<T> implements FutureCallback {
    private final FutureCallback<? super T> callback;
    private final Runnable completionCallback;

    public CompletionFutureCallback(
        final FutureCallback<? super T> callback,
        final Runnable completionCallback)
    {
        this.callback = callback;
        this.completionCallback = completionCallback;
    }

    @Override
    public void cancelled() {
        callback.cancelled();
        completionCallback.run();
    }

    @Override
    public void completed(final T result) {
        callback.completed(result);
        completionCallback.run();
    }

    @Override
    public void failed(final Exception e) {
        callback.failed(e);
        completionCallback.run();
    }
}

Зоркий глаз сразу скажет: А что если коллбэк был написан говнокодером и он кинет unchecked exception в ответ на вызов cancelled, completed или failed? Тогда completionCallback вызван не будет. Ладно, переделаем на finally. Далее уже рассматриваем рефакторинг одной функции, благо все они однотипные:

@Override
public void cancelled() {
    try {
        callback.cancelled();
    } finally {
        completionCallback.run();
    }
}

Зоркий глаз возразит ещё раз: А что если оба коллбэка написаны одним и тем же говнокодером и completionCallback.run() так же кинет unchecked exception? Да, после того как unchecked exception кинул callback.cancelled(). Даже если мы где-то снаружи ловим все Throwable, то информация о первом эксепшене будет безвозвратно потеряна.
В этот момент перфекционист вырывает клок волос из головы и призывает в помощь try-with-resources:

class Completer implements AutoCloseable {
    private final Runnable completionCallback;

    public Completer(final Runnable completionCallback) {
        this.completionCallback = completionCallback;
    }

    @Override
    public void close() {
        completionCallback.run();
    }
}

public class CompletingFutureCallback<T> implements FutureCallback<T> {
    …
    @Override
    public void cancelled() {
        try (Completer completer = new Completer(completionCallback)) {
            callback.cancelled();
        }
    }
    …
}

Вот теперь всё предельно корректно:
Если callback кинет исключение, то completer.close() так же будет вызван, и если он также кинет исключение, то это второе исключение будет добавлено к первому в список suppressed и при печати стек-трейса его будет видно и можно будет поанализировать.
Ну а если callback отработал как следует, то completer.close() так же будет вызван, а если исключение, if any, будет также проброшено наружу.

#KIFEAY (7) / @hirthwork / 4026 дней назад

Посоветуйте годную гуглгруппу или иной ресурс, куда можно было бы запостить
пост со сравнением двух сходных идиом и чтобы получить нормальную дискуссию.
SO не подходит, потому что у меня скорее не вопрос, а приглашение к обсуждению.
В гуглгруппсы глянул и их там сотни и первые две на полнены вопросами типа
how to hide and show cursor in JTextField? и происками HR

#ZPF3PC (14) / @hirthwork / 4026 дней назад
Я так понимаю, что стоковый почтовый клиент не умеет получать письма в формате ХТМЛ и не умеет синхронизировать выбранные папочки в по IMAP. Досада и боль. А какие есть приличные?
#0MLZZF (10) / @dluciv / 4026 дней назад
Подскажите хорошую анноилку о новых сообщениях в IMAP-меилбоксе. Консольная проверялка тоже ок. Чото год назад копался и всё говно, а клаус не умеет.
#RZGIKZ (17) / @l29ah / 4026 дней назад

Перцы, кто syncthing осилил?
Насколько оно надежно/юзабельно?

#SFJCEA (46+1) / @ninesigns / 4026 дней назад
Интервью с одним из основателей радио Рокс http://www.fontanka.ru/2015/04/20/181/ Речь о том, что на существующих аналоговых FM частотах можно будет напихать вчетверо больше цифровых радиостанций. Это в принципе похоже на правду (хотя там, где аналоговое было слышно плохо, цифровое станет не слышно вообще). Но меня удивляет вот что: CCIR УКВ -- это текущий "FM-диапазон": https://ru.wikipedia.org/wiki/%D0%A3%D0%9A%D0%92_CCIR В России планируется внедрение цифрового радио на других частотах: https://ru.wikipedia.org/wiki/%D0%A6%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D0%BE%D0%B5_%D1%80%D0%B0%D0%B4%D0%B8%D0%BE#.D0.92.D0.BD.D0.B5.D0.B4.D1.80.D0.B5.D0.BD.D0.B8.D0.B5_.D1.86.D0.B8.D1.84.D1.80.D0.BE.D0.B2.D0.BE.D0.B3.D0.BE_.D1.80.D0.B0.D0.B4.D0.B8.D0.BE.D0.B2.D0.B5.D1.89.D0.B0.D0.BD.D0.B8.D1.8F Это совершенно логично -- не вырубать же существующие станции сразу после включения цифровых. Теперь видим вот эту реплику: /– Они не должны будут никого к себе пускать. Но они смогут раскрыть собственные возможности. Сейчас, например, у них одна программа. Условно назовём – "Эрмитаж". А дальше, предположим, на этой же частоте появляются другие станции: например, "Джаз вокальный", "Джаз прогрессивный" и так далее. От такого расширения форматов выиграет сам держатель частоты./ Человек -- один из основателей радиостанции. Я не верю, что он может быть настолько не в теме. Я что-то понял неправильно?
#S68BK2 (0+2) / @dluciv / 4027 дней назад
>Бесплатная доставкав службой China Post Registered Air Mail Это заказное письмо?
#VHCIXK (1) / @sin-ok / 4027 дней назад
Как разорвать все tcp-соединения которые проходят через определённый интерфейс и хотя бы оканчиваются сокетом на этой машине?
#98FESL (6) / @l29ah / 4027 дней назад
Снёс случайно содержимое /dev. Как попросить udev его наполнить обратно? Инбифо перезагрузиться и devtmpfs.
#ODPME7 (2) / @l29ah / 4027 дней назад
Что в них вставлять? // распечатку с хуйцом комара
#GG8NHH (3) / @sin-ok / 4028 дней назад
?
Каково быть русским? Уважают ли нас другие страны, боятся или ненавидят?
#ZO48BH (3) / @anonymous / 4028 дней назад
Кто-нибудь юзал http://julialang.org/ ? По-моему она не такая платная, как Матлаб, не такая тормозная, как Питон, и не такая отстойная, как они оба. А ещё на видео бородатый чувак в халате, прямо как я https://youtu.be/Eb8CMuNKdJ0 Кто-нибудь скажет pros/cons?..
#ARBK2P (16) / @dluciv / 4028 дней назад
Я один не понял, при чём тут Покемоны? https://www.youtube.com/watch?v=fDKsd-lmSXU
#2PB41N (1) / @o01eg / 4028 дней назад
?
Чи є порушенням NAP занадто швидке дихання на космічній станції?
#KJHIJU (1) / @hate-engine / 4029 дней назад
?

Являются ли вопящие (анноящие) в общественных местах спиногрызы нарушением NAP?

#U012A9 (10) / @ninesigns / 4029 дней назад
У меня телефон без диода для оповещений, но с адской диодной вспышкой (да, вы уже догадались, что это за говножелезка). Соответственно, когда мне звонят или присылают SMS, если меня в тот самый момент рядом нету, то я об этом, пока не включу экран, не узнаю. Вообще. Я вот сегодня продолбал довольно важную SMS например. Собственно ищу софтину, которая при пропущенных звонках и СМС периодически пыхает вспышкой, как минимум пока я экран не разблокирую. Нахожу пока только индийское говно с рекламой, которое нормально не работает. Посоветуете какую-нибудь?
#ZQXYJM (8) / @dluciv / 4029 дней назад

Зачем вникать в суть проекта, пытаться проанализировать архитектурные решения, модульность,
выявлять недостатки с т/з безопасности,
когда можно просто сказать софт написан на питоне, C++, whatever и поэтому говно априорно?

#MMPXXB (6+2) / @ninesigns / 4029 дней назад
Шарпеи норм, нет?
#VA3DPQ (3) / @sin-ok / 4030 дней назад
lighttpd всё? nginx научился генерировать индекс-странички в utf8?
#TP5EYM (12) / @l29ah / 4031 день назад
--
ipv6 ready BnW для ведрофона BnW на Реформале Викивач Котятки

Цоперайт © 2010-2016 @stiletto.