powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Как вызвать async/await код из OperationContract кода?
6 сообщений из 6, страница 1 из 1
Как вызвать async/await код из OperationContract кода?
    #39144983
mabanza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.
В WCF функции хочу вызвать обработчик асинхронно
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
 [OperationContract]
  public string GetWelcomeGreeting(bool IsUser, out string ErrorStr)
  {
       ErrorStr = "";
       string result = "";
        
        Proc0();

        return result;
  }

 private async Task<string> Proc0()
 {
            string result = "";
            Task task = new Task(() =>
            {
                string sql = String.Concat("select Content from WebWelcomeGreet where Mode=", true);
                result = dal.GetScalar(sql);
            });
            await task;
            return result;
 }



но задача task в Proc0() никогда не вызывается. В чем может быть проблема?
Спасибо.
...
Рейтинг: 0 / 0
Как вызвать async/await код из OperationContract кода?
    #39145056
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как вызвать async/await код из OperationContract кода?
    #39150024
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mabanza,

Во первых, вы не так работаете с асинхронностью - если уж говорить об async/await.

Попробуйте изменить так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
[OperationContract]
  public async string GetWelcomeGreeting(bool IsUser, out string ErrorStr)
  {        
        string result = await Proc0();

        return result;
  }

 private async Task<string> Proc0()
 {
            Task <string> mytask = dalGetScalarAsync(sql);
            string result = await mytask;
            
/*
   это не правильный подход в принципе. 
   нужно избегать создания новых потоков (через таск), когда они не нужны.

            Task task = new Task(() =>
            {
                string sql = String.Concat("select Content from WebWelcomeGreet where Mode=", true);
                result = dal.GetScalar(sql);
            });*/

            return result;
 }



Разберитесь как работать с асинхронными методами в принципе. Могу порекомендовать пару книг.

Во вторых
На удаленный сервис можно натравить стандартную утилиту VS (Add Service Reference). Там по умолчанию уже включена галочка "генерировать для каждого метода асинхронные версии". Все сделает сама.
В результате чего получите клиента где будет каждый метод + асинхронная пара к нему.
Вызывайте эти асинхронные версии через async/await.
...
Рейтинг: 0 / 0
Как вызвать async/await код из OperationContract кода?
    #39150040
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Axeleron,

Подход, реализованный через IAsyncResult является устаревшим. Не стоит ориентироватся на эту ссылку.

Современным подходом (TAP. С применением Task, async/await) описывается тут
https://msdn.microsoft.com/ru-ru/library/hh873175(v=vs.110).aspx
...
Рейтинг: 0 / 0
Как вызвать async/await код из OperationContract кода?
    #39150080
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotek,
WCF подход также прошу считать устаревшим тогда. Уже давно в моде RESTful
...
Рейтинг: 0 / 0
Как вызвать async/await код из OperationContract кода?
    #39150106
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Axeleron,

Я не хочу сказать, что применение IAsyncResult запрещено. Это официально устаревший подход. Рекомендуемым является TAP.
Тем более mabanza просил именно про async/await/Task подход.

Так, что уж если изучать - то лучше изучать официально последние рекомендации, чтобы не переучиваться, или не сидеть на устаревших подходах.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Как вызвать async/await код из OperationContract кода?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]