C# 带参数的wcf任务

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 =

这是我当前的实现。我使用全局会话变量将数据从begin方法传递到执行所有工作的函数

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_函数时使用参数,则将永远不会显示此消息;