美好的一天!
我有简单的wcf服务和桌面客户端,它使用一些功能。 但我的客户端错误,除了我的wcf操作太长了。
一些代码:
client=new MyWcfServiceClient();
client.DoWork(param1,param2..etc);
我不需要等待DoWork工作。我需要执行这个方法并继续前进。这就像发送命令做一些工作,我不需要立即得到结果。
怎么做? 谢谢!
P.S。服务器端代码如下:
DoWork(param1,etc)
{
// do long-term work at same thread
}
P.P.S。我知道了结果。
答案 0 :(得分:2)
在服务上,将您的逻辑从:DoWork(param1等)转移到另一个方法,例如: DoWorkBackground(...)
static Task _backgroundTask;
void DoWork(param1, etc)
{
if (_backgroundTask == null || _backgroundTask.IsCompleted)
_backgroundTask = System.Threading.Tasks.Task.Run(
() => DoWorkBackground(param1, etc) );
}
void DoWorkBackground(param1, etc)
{
//long running logic
}
答案 1 :(得分:1)
你可以做点什么:
private static Task DoWork()
{
// do stuff here
// return something (?) assuming you need or care about this
}
然后你可以做类似
的事情Task task = DoWork().Start;
// you can wait, poll, or if you don't care, ignore the result
答案 2 :(得分:1)
使用.NET 4.5,您可以在向应用程序添加服务引用的同时创建基于任务的代理。可以通过单击“添加服务引用”对话框中的“高级”按钮来完成此操作。有关详细信息,请参阅here。
完成此操作后,您将获得以下内容:DoWorkAsync
使用这个新代理你可以这样做:
var result = await client.DoWorkAsync(param1,param2..etc);
答案 3 :(得分:1)
如果您可以修改DoWork操作,请将其定义为OneWay,以便立即返回。如果DoWork是Web服务,则将返回HTTP代码202。