使用非静态方法作为Task的源

时间:2014-09-09 10:23:44

标签: c# multithreading task

我正在使用Thread类来创建另一个执行线程。像这样:

/// <summary>
/// This method is executed in parallel thread (NON-static!)
/// </summary>
private void SomeMethod()
{
    // some actions
}

var thread = new Thread(SomeMethod);
thread.Start();

但是现在我需要能够在运行时取消SomeMethod的执行。所以我尝试使用Task类及其取消机制。 当我尝试将SomeMethod作为参数传递给像这样的

的Task构造函数时
private Task _task = new Task(SomeMethod);

我有这个编译错误:

无法在静态上下文中访问非静态方法“SomeMethod”

我不能让SomeMethod静止,因为很多原因是不可能的。  据我所知,Task课程超过Thread课程,所以这是我认为非常奇怪的限制。  是否可以使用非静态方法作为Task的来源?

2 个答案:

答案 0 :(得分:2)

使用构造函数:

private Task _task;

public YourClassName()
{
   this._task = new Task(this.SomeMethod);
}

答案 1 :(得分:0)

您也可以使用lambda表达式。

private void SomeMethod() {
    // some actions
}

Task task = new Task(() => {
    SomeMethod();
});
task.Start();