带参数的wcf任务

时间:2014-08-12 07:19:53

标签: 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 = 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;
}

这个实现的问题在于,如果my_function执行时间过长,则可以通过另一个调用更改parameter1或parameter2变量,并且它会弄乱所有内容。

所以,我只想传递参数1和参数2以及Factory.StartNew而不是使用全局变量,但到目前为止我还没有设法。

1 个答案:

答案 0 :(得分:0)

以下是解决方案:

    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
    }