locked
Некорректная работа Task на WP 8.1 RRS feed

Ответы

  • Да, Вы правы. Задержка без await не выполняется. Однако, модель, которую Вы пытаетесь повторить на WP, наверное, не реализуема. В момент вызова асинхронного метода (через await) содержащий этот вызов метод возвращает управление. Поэтому мы и наблюдаем сообщение "Main thread ending" (задачи завершены). Код, размещенный ниже строки await, будет выполняться уже в другом потоке (это хорошо видно в отладчике). Т.к. этот поток не "обернут" в Task, CurrentID == null.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    12 августа 2014 г. 10:47

Все ответы

  • Добрый день, пытаюсь понять принцы работы многопоточности на примере из книги C# 4.0: The Complete Reference который хорошо работает на ПК, но в тоже время на ВинПфоне отрабатывает совсем по другому и не приводит к должному результату.

    Вот исходный код оригинала для ПК / Результат с ПК

    Вот код для смартформа / Результат

    В чем может быть причина сего?


    Какая версия Win Phone и что вас не устраивает в выводе результата?
    9 августа 2014 г. 17:13
  • Какая версия Win Phone и что вас не устраивает в выводе результата?

    Версия четко указана в названии темы, а если бы Вы были более внимательны к результатам вывода и сравнили их, то не задавали бы такой вопрос.

    Поясняю - в винпфоне главный поток обрывается в начале вычислений а не в конце, а с поставленными задачами происходят странные вещи, возможно они не работают вовсе так как не определен их ИД.

    10 августа 2014 г. 5:59
  • Для WP Вы написали другой код (используя async/await), поэтому он и работает по другому. Уберите эти слова и получите желаемый результат. И еще, не стоит столь резко реагировать на ответы участников форума :) Здесь не отдел техподдержки MS, а добровольное сообщество программистов.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    10 августа 2014 г. 7:39
  • kosuke904, спасибо. Изначально я собирался использовать идентичный код, но дело в том, что в винпфоне не работает метод Thread.Sleep(500) благодаря чему, я заменил его на Task.Delay(500) который в свою очередь не работает без async/await

    Как же мне быть в такой ситуации?

    10 августа 2014 г. 7:56
  • в винпфоне не работает метод Thread.Sleep(500) благодаря чему, я заменил его на Task.Delay(500) который в свою очередь не работает без async/await

    Все прекрасно компилируется и работает. Проверил. Просто уберите async в заголовке метода и await у Delay.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    • Предложено в качестве ответа Taras KovalenkoBanned 11 августа 2014 г. 7:30
    • Отменено предложение в качестве ответа AlekseyGr 11 августа 2014 г. 14:50
    10 августа 2014 г. 11:58
  • Вы меня не дооцениваете). Изначально я так и делал, но таким образом временная задержка не происходит и потоки проскакивают моментально. Thread.Sleep() эквивалентно await Task.Delay() именно c await
    11 августа 2014 г. 14:49
  • Вы меня не дооцениваете). Изначально я так и делал, но таким образом временная задержка не происходит и потоки проскакивают моментально. Thread.Sleep() эквивалентно await Task.Delay() именно c await
    Я бы сказал "аналогично", а не "эквивалентно". Они по разному работают.
    11 августа 2014 г. 15:26
  • Да, Вы правы. Задержка без await не выполняется. Однако, модель, которую Вы пытаетесь повторить на WP, наверное, не реализуема. В момент вызова асинхронного метода (через await) содержащий этот вызов метод возвращает управление. Поэтому мы и наблюдаем сообщение "Main thread ending" (задачи завершены). Код, размещенный ниже строки await, будет выполняться уже в другом потоке (это хорошо видно в отладчике). Т.к. этот поток не "обернут" в Task, CurrentID == null.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    12 августа 2014 г. 10:47
  • kosuke904, наверное Вы правы.

    Чтож у меня есть еще вопросы касательно потоков, но всеже не буду засорять эту. Будем считать ее закрытой. Спасибо

    16 августа 2014 г. 7:23