- 我无法将 bool 设置为返回 bool 的方法。
- 我正在使用任务类型的队列,并将该方法作为新任务传递给队列。
- 如何根据 Task.Start() 内部使用的方法调用设置布尔值?
如何重新执行任务,以便可以多次调用 Task.Start()?
public static void Main(string[] args) { Console.WriteLine("Performing Queue<Task> q = new Queue<Task>();"); Queue<Task> q = new Queue<Task>(); Console.WriteLine("Finished Queue<Task> q = new Queue<Task>();"); Console.WriteLine("Performing q.Enqueue(new Task(() => hello(\"world\") ) );"); q.Enqueue(new Task(() => print("hello world") ) ); Console.WriteLine("Finished q.Enqueue(new Task(() => hello(\"world\") ) );"); Console.WriteLine("Performing Task peek = q.Peek();"); Task peek = q.Peek(); Console.WriteLine("Finished Task peek = q.Peek();"); Console.WriteLine("Performing peek.Start();"); //bool temp = peek.Start(); // does not set temp to true, how do I accomplish this? peek.Start(); // Works, but does not return true as print() should return true, how do I accomplish this? Console.WriteLine("Finished peek.Start();"); Console.WriteLine("Performing Task dequeue = q.Dequeue();"); Task dequeue = q.Dequeue(); Console.WriteLine("Finished Task dequeue = q.Dequeue();"); Console.WriteLine("Performing dequeue.Start();"); //bool temp2 = dequeue.Start(); // does not set temp2 to true, how do I accomplish this? dequeue.Start(); // How do I make a Task reexecute? Console.WriteLine("Finished dequeue.Start();"); } public static bool print(string text) { Console.WriteLine("print(" +text +")"); return true; }
问问题
96 次
1 回答
0
以下是如何从 Task 获取返回值的示例:
http://msdn.microsoft.com/en-us/library/dd537613
Task 的 MSDN 文章 (http://msdn.microsoft.com/en-us/library/dd270682.aspx) 说:
一个任务只能启动和运行一次。任何第二次安排任务的尝试都将导致异常。
我建议找到一种使用 Task.Factory.StartNew() 而不是 new Task().Start 重写代码的方法。这是一篇关于差异的好文章:
http://blogs.msdn.com/b/pfxteam/archive/2010/06/13/10024153.aspx
为什么不排队 enum 值而不是 Tasks 本身,然后编写一个小函数来根据 enum 值运行任务。它可能看起来像:
public static void StartTask(Actions action)
{
if (action == Actions.Print)
{
Task t = new Task(() => print("hello world"));
t.Start();
}
}
合并基于第一个示例的返回值,然后一切就绪。
于 2012-05-29T05:18:10.487 回答