Лучший отвечающий
Некорректная работа Task на WP 8.1

Вопрос
-
Добрый день, пытаюсь понять принцы работы многопоточности на примере из книги C# 4.0: The Complete Reference который хорошо работает на ПК, но в тоже время на ВинПфоне отрабатывает совсем по другому и не приводит к должному результату.
Вот исходный код оригинала для ПК / Результат с ПК
Вот код для смартформа / Результат
В чем может быть причина сего?
9 августа 2014 г. 8:28
Ответы
-
Да, Вы правы. Задержка без await не выполняется. Однако, модель, которую Вы пытаетесь повторить на WP, наверное, не реализуема. В момент вызова асинхронного метода (через await) содержащий этот вызов метод возвращает управление. Поэтому мы и наблюдаем сообщение "Main thread ending" (задачи завершены). Код, размещенный ниже строки await, будет выполняться уже в другом потоке (это хорошо видно в отладчике). Т.к. этот поток не "обернут" в Task, CurrentID == null.
Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!
- Предложено в качестве ответа kosuke904 16 августа 2014 г. 6:53
- Помечено в качестве ответа Dmitriy VereshchakMicrosoft contingent staff 18 августа 2014 г. 7:07
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
Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!
- Предложено в качестве ответа Taras KovalenkoBanned 11 августа 2014 г. 7:30
- Отменено предложение в качестве ответа AlekseyGr 11 августа 2014 г. 14:50
10 августа 2014 г. 11:58 -
Вы меня не дооцениваете). Изначально я так и делал, но таким образом временная задержка не происходит и потоки проскакивают моментально. Thread.Sleep() эквивалентно await Task.Delay() именно c await11 августа 2014 г. 14:49
-
Вы меня не дооцениваете). Изначально я так и делал, но таким образом временная задержка не происходит и потоки проскакивают моментально. Thread.Sleep() эквивалентно await Task.Delay() именно c await
Я бы сказал "аналогично", а не "эквивалентно". Они по разному работают.11 августа 2014 г. 15:26 -
Да, Вы правы. Задержка без await не выполняется. Однако, модель, которую Вы пытаетесь повторить на WP, наверное, не реализуема. В момент вызова асинхронного метода (через await) содержащий этот вызов метод возвращает управление. Поэтому мы и наблюдаем сообщение "Main thread ending" (задачи завершены). Код, размещенный ниже строки await, будет выполняться уже в другом потоке (это хорошо видно в отладчике). Т.к. этот поток не "обернут" в Task, CurrentID == null.
Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!
- Предложено в качестве ответа kosuke904 16 августа 2014 г. 6:53
- Помечено в качестве ответа Dmitriy VereshchakMicrosoft contingent staff 18 августа 2014 г. 7:07
12 августа 2014 г. 10:47 -
kosuke904, наверное Вы правы.
Чтож у меня есть еще вопросы касательно потоков, но всеже не буду засорять эту. Будем считать ее закрытой. Спасибо
16 августа 2014 г. 7:23