Task<> does not contain a definition for 'GetAwaiter'

后端 未结 11 1280
佛祖请我去吃肉
佛祖请我去吃肉 2020-11-30 07:11

Client

iGame Channel = new ChannelFactory ( new BasicHttpBinding ( BasicHttpSecurityMode . None ) , new EndpointAddress ( new Uri ( \"http://loc         


        
11条回答
  •  刺人心
    刺人心 (楼主)
    2020-11-30 07:37

    GetAwaiter(), that is used by await, is implemented as an extension method in the Async CTP. I'm not sure what exactly are you using (you mention both the Async CTP and VS 2012 RC in your question), but it's possible the Async targeting pack uses the same technique.

    The problem then is that extension methods don't work with dynamic. What you can do is to explicitly specify that you're working with a Task, which means the extension method will work, and then switch back to dynamic:

    private async void MyButtonClick(object sender, RoutedEventArgs e)
    {
        dynamic request = new SerializableDynamicObject();
        request.Operation = "test";
    
        Task task = Client(request);
        dynamic result = await task;
    
        // use result here
    }
    

    Or, since the Client() method is actually not dynamic, you could call it with SerializableDynamicObject, not dynamic, and so limit using dynamic as much as possible:

    private async void MyButtonClick(object sender, RoutedEventArgs e)
    {
        var request = new SerializableDynamicObject();
        dynamic dynamicRequest = request;
        dynamicRequest.Operation = "test";
    
        var task = Client(request);
        dynamic result = await task;
    
        // use result here
    }
    

提交回复
热议问题