Асинхронный CTP вызывает метод службы wcf ria, возвращающий строковое значение.

Я пытаюсь внедрить следующее в свой проект сервисов Silverlight wcf ria.

http://blogs.msdn.com/b/kylemc/archive/2010/11/02/using-the-visual-studio-async-ctp-with-ria-services.aspx

Он отлично работает для объектов. Однако я пытаюсь написать собственный метод, который возвращает строку и выдает ошибку.

Пользовательский метод

    public string GetHello(string str)
    {
        return ("Hello " + str);
    }

Звонок от клиента

String str;

str = await context.LoadAsync(context.GetHello("Sam")).ToString();

Ошибка:

Оператор «ожидания» требует, чтобы его операнд «System.ServiceModel.DomainServices.Client.InvokeOperation» имел подходящий общедоступный метод GetAwaiter.


person Paul Krish    schedule 29.09.2011    source источник
comment
Пожалуйста, перепроверьте код вашего примера. Вы абсолютно уверены, что этот клиентский код приведет к этой ошибке?   -  person Stephen Cleary    schedule 29.09.2011


Ответы (1)


Вам нужно вызвать AsTask, чтобы преобразовать InvokeOperation в Task.

person Stephen Cleary    schedule 29.09.2011
comment
Я попробовал это, и теперь я получаю Невозможно неявно преобразовать тип «System.ServiceModel.DomainServices.Client.InvokeOperation‹string›» в «строку» hstring = await this.parentWindow.ctx.HashString(asdasd).AsTask(); Этот метод отлично работает, если я вызываю его асинхронно (используя делегат). Но я использую асинхронный CTP и код Кайла для синхронного вызова метода. - person Paul Krish; 29.09.2011
comment
После того, как вы await прочтете InvokeOperation<string>.Value участника. например, (await this.parentWindow.ctx.HashString("asdasd").AsTask()).Value - person Stephen Cleary; 29.09.2011
comment
Я не смог найти AskTask(). Где это определено? - person Chui Tey; 06.04.2012
comment