这是我目前的实施。我使用全局会话变量将数据从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而不是使用全局变量,但到目前为止我还没有设法。
答案 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
}