Асинхронные таски

q20w26a

Разработчик
Инструктор
Пользователь
Сообщения
580
Решения
27
Добрейшего времени суток. Мне понадобилось использовать асинхронные таски для работы работы с миром, но как мы знаем, делать так нельзя, иначе будет java.lang.IllegalStateException: Asynchronous <действие> !. Собственно, отказаться от асинхронизации мне нельзя, и мне нужен ваш совет.
Наткнулся кстати на один способ, но выглядит он костыльно как-то... Суть заключается в том, что мы создаем еще один таск (не асинхронный), и запускаем его в асинхронном. Заранее спасибо.
 
@iBuseWinner, без разницы, работу с миром я рассмотрел как пример.
Я попробовал этот способ с запуском еще одного Runnable в асинхронном таске, но он выполняется всего один раз.
Java:
public class AsyncTask extends BukkitRunnable  {

    @Override
    public void run() {
            //"Сложные" математические расчеты
            final BukkitRunnable syncTask = new BukkitRunnable()
            {
               @Override
               public synchronized void run()
               {
                     //действия с Bukkit API
                  notify();
               }
            };
        }

}

Java:
...
    @Override
    public void onEnable() {
        new AsyncTask().runTaskAsynchronously(this);
    }
...
 
Последнее редактирование модератором:
А если просто так делать?
Java:
private void asyncTask(Runnable runnable, long delay) {
        BukkitObjects.scheduleAsyncDelayedTask(runnable, delay);
}
И в onEnable:
asyncTask(new AsyncTask(), 20);

Код взял отсюда:
 
Назад
Сверху Снизу