C# 带参数的wcf任务
这是我当前的实现。我使用全局会话变量将数据从begin方法传递到执行所有工作的函数C# 带参数的wcf任务,c#,.net,wcf,delegates,task,C#,.net,Wcf,Delegates,Task,这是我当前的实现。我使用全局会话变量将数据从begin方法传递到执行所有工作的函数 string parameter1; string parameter2; public IAsyncResult BeginSomeMethod(string parameter1, string parameter2, AsyncCallback callback, object state) { this.parameter1 = parameter1; this.parameter2 =
string parameter1;
string parameter2;
public IAsyncResult BeginSomeMethod(string parameter1, string parameter2, AsyncCallback callback, object state)
{
this.parameter1 = parameter1;
this.parameter2 = parameter2;
var task = Task<string>.Factory.StartNew(my_function, state);
return task.ContinueWith(res => callback(task));
}
public string EndSomeMethod(IAsyncResult result)
{
Console.WriteLine("If i use parameters when calling my_function, this message will never be displayed . ");
return ((Task<string>)result).Result;
}
private string my_function(object state)
{
Task.Delay(5000);
return parameter1 + " " + parameter2;
}
这个实现的问题是,如果我的函数执行时间太长,parameter1或parameter2变量可能会被另一个调用更改,这会把一切都搞糟
因此,我只想将参数1和参数2与Factory.StartNew一起传递,而不是使用全局变量,但到目前为止,我没有做到这一点 以下是解决方案:
public IAsyncResult BeginSomeMethod(string parameter1, string parameter2, AsyncCallback callback, object state)
{
var task = Task<List<int>>.Factory.StartNew((res) => my_function(state, parameter1, parameter2), state);
return task.ContinueWith(res => callback(task));
}
public List<int> EndSomeMethod(IAsyncResult result)
{
return ((Task<List<int>>)result).Result;
}
private List<int> my_function(object state, string parameter1, string parameter2)
{
//implementation goes here
}
看,我已经试过了。参数被传递到my_函数,代码被执行,但main方法不返回任何内容。。。从客户端调用时,出现超时异常。不知何故,它从未从EndSomeMethod到达这一行:returntaskResult.Result;我以为你的问题是关于向我的函数传递参数。你到底有什么问题?请注意,您可以通过问题下方的“编辑”按钮编辑问题。问题是,如果我像您建议的那样传递参数,SomeMethod将永远不会返回任何内容。来自WCF客户端的调用:client.SomeMethodparam1,param2;没有响应,最终超时。我编辑了代码并添加了以下内容:Console.writelinei如果在调用my_函数时使用参数,则将永远不会显示此消息;