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;