我想執行TaskQueue
。 我將任務添加到隊列中,當我調用Run()
時,任務將由線程執行。代表所有方法
class Executer
{
private Queue<Task> TaskQueue;
private Thread thread;
public Executer()
{
this.TaskQueue = new Queue<QueueNode>();
}
public void AddTask(Task task)
{
this.TaskQueue.Enqueue(task);
}
public void Run()
{
this.thread = new Thread(() => ThreadMethod);
this.thread.Start();
}
}
ThreadMethod
遍歷Queue
並執行Task
秒。
但我的問題是,我找不到Task
的數據類型,因爲Task
可能是一切。
假設我只想用int
參數調用方法。然後,它很容易.. Task
可能是這樣的:
Action<int> Task = object.AddToTheObjectCounter(5);
但這是從無限多的只有一宗。
你能給我一個小費嗎?
我也曾經想過調用方法動態地
object.GetType().GetMethod("AddToTheObjectCounter") // ...
,但我認爲這是不好的,因爲當我有一個拼寫錯誤的代碼編譯,但會崩潰。
提示: 我想通了,你可以用參數的變盤點調用委託(看下面的回答):
private void TestMethod()
{
Delegate function = (Func<int, int, int>)((a, b) => a * b);
object[] parameters = new object[] {7, 2};
var result = (int)function.DynamicInvoke(parameters);
}
好主意。但我有一個問題。你的代碼正在工作,但我無法調用任務。當我在我的線程中,我想用值調用函數我不能這樣做,因爲我不能使用委託任務作爲方法(錯誤)。我想我必須先把它回到Func <...> - 任何想法? – Jens
這是完整的錯誤:不可調用的成員'ThreadQueue.QueueNode.Function'不能像方法一樣使用。 - 函數是這種情況下的任務 – Jens
@JensHorstmann由於在談論Delegate實例時不知道返回類型或參數是什麼,所以必須使用DynamicInvoke方法。 – user35443