Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 任务不包含“GetWaiter”的定义_C#_Wcf_Silverlight 5.0_Async Ctp - Fatal编程技术网

C# 任务不包含“GetWaiter”的定义

C# 任务不包含“GetWaiter”的定义,c#,wcf,silverlight-5.0,async-ctp,C#,Wcf,Silverlight 5.0,Async Ctp,客户 服务 [OperationContract ( AsyncPattern = true )] IAsyncResult BeginConnection ( SerializableDynamicObject Message , AsyncCallback Callback , object State ); SerializableDynamicObject EndConnection ( IAsyncResult Result ); 从Silverlight客

客户

服务

    [OperationContract ( AsyncPattern = true )]
    IAsyncResult BeginConnection ( SerializableDynamicObject Message , AsyncCallback Callback , object State );

    SerializableDynamicObject EndConnection ( IAsyncResult Result );
从Silverlight客户端公开服务

public IAsyncResult BeginConnection ( SerializableDynamicObject Message , AsyncCallback Callback , object State )
{
    dynamic Request = Message;
    dynamic Response = new SerializableDynamicObject ( );
    if ( Request . Operation = "test" )
    {
        Response . Status = true;
    }
    Response . Status = false;

    return new CompletedAsyncResult<SerializableDynamicObject> ( Response );
}

public SerializableDynamicObject EndConnection ( IAsyncResult Result )
{
    return ( Result as CompletedAsyncResult<SerializableDynamicObject> ) . Data;
}
例外情况

private async void myButton ( object sender , RoutedEventArgs e )
{
    dynamic Request = new SerializableDynamicObject ( );
    Request . Operation = "test";

    var task = Client ( Request );
    var result = await task;  // <------------------------------ Exception
}
怎么了

编辑1:

简而言之

Visual studio 2012 RC Silverlight 5应用程序通过共享便携库使用ChannelFactory技术使用ASP.net 4应用程序中托管的游戏WCF 4服务。NET4/SL5包含带有异步CTP的iGame接口

图表: await使用的ASP.NETGetAwaiter在异步CTP中作为扩展方法实现。我不确定你到底在用什么你在问题中提到了异步CTP和VS 2012 RC,但异步目标包可能使用相同的技术

因此,问题是扩展方法不适用于动态。您可以做的是显式指定您正在处理一个任务,这意味着扩展方法将工作,然后切换回动态:


我遇到这个问题是因为我正在调用一个方法

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
}
但我是在跟你开玩笑

await myClass.myStaticMethod(myString);
这导致了一个动态类型,而不是字符串,因此当我试图等待myClass.myStaticMethodmyString时,编译器认为我是想调用myClass.myStaticMethoddynamic myString。这个方法编译得很好,因为在动态上下文中,它在运行时崩溃之前都是好的,这是因为没有实现myStaticMethod的动态版本,并且这个错误消息没有任何帮助,Intellisense将带我找到正确的定义这一事实也没有帮助。狡猾

但是,通过强制结果类型为字符串,如:

var myString = String.Format({some dynamic-type values})


我对myStaticMethod的调用路由正确

我在一个项目中遇到了这个问题,我发现我已将项目的.Net Framework版本设置为4.0,异步任务仅在.Net Framework 4.5以后的版本中受支持

我只是将我的项目设置更改为使用.Net Framework 4.5或更高版本,它就成功了。

您必须安装NuGet软件包才能在.Net 4.5之前的版本(如Silverlight 4.0)中使用异步/等待构造+

为了清楚起见,这个包以前被称为Microsoft.CompilerServices.AsyncTargetingPack,一些旧的包仍然引用它


查看Immo Landwerth提供的信息。

刚刚在一个执行linq查询的方法中体验到了这一点

string myString = String.Format({some dynamic-type values})

需要改用.FirstOrDefaultAsync。N00b错误。

您仍然可以使用framework 4.0,但必须为类包含GetWaiter:

public async Task<Foo> GetSomething()
{
    return await (from foo in Foos
                  select foo).FirstOrDefault();
}

MethodNameparameters.ConfigureAwaitfalse.GetAwaiter.GetResult

在我的例子中,只需添加使用系统;解决此问题。

请确保.NET 4.5版或更高版本出现此问题,因为我使用的应用程序和添加到应用程序中的dll都有不同的版本

添加此包- 安装软件包Microsoft.Bcl.Async-版本1.0.168


添加此软件包异步代码在版本4.0中也变得兼容,因为异步仅适用于版本大于或等于4.5的应用程序。如果异步代码对任何人都有帮助,则错误消息:

'不包含“GetWaiter等”的定义

如果wait错误地放在变量前面,也会发生如下情况:

而不是:

public async Task<model> GetSomething(int id)
{
    return await context.model.FindAsync(id);
}

如果您正在编写Visual Studio扩展VSIX,请确保您具有Microsoft.VisualStudio.Threading的using语句,例如:

RtfAsTextLines = await OpenNoUserInterface(FilePath);

我也遇到了同样的问题,我必须从方法中删除async关键字,也必须从调用方法中删除await关键字,才能使用getawaiter而不会出现任何错误。

请说明C版本,并在文件顶部包含用法。如果您使用的是async CTP,你确定要添加对AsyncCtpLibrary.dll的引用吗?谢谢你-我正在使用的服务器是4.0,我无法升级到4.5。请在你的代码中添加一个说明,解释你的代码为什么应该帮助他。这对我来说也是一个例子。从4.0改为4.5后,它就运行了。或者安装Microsoft.Bcl.Async nuget软件包以保留在4.0中。对我来说,它是ToListSync。很好。是的,对我也很有效-FirstOrDefaultAsync,并使用Microsoft.EntityFrameworkCore添加了一个核心2.2项目相同,我使用UWP,它只是一个缺失的使用系统;呼叫
string myString = String.Format({some dynamic-type values})
public async Task<Foo> GetSomething()
{
    return await (from foo in Foos
                  select foo).FirstOrDefault();
}
public async Task<model> GetSomething(int id)
{
    return await context.model.FindAsync(id);
}
RtfAsTextLines = await OpenNoUserInterface(FilePath);
using Microsoft.VisualStudio.Threading;