我刚开始使用并行编程。我想创建一个在控制台上打印消息的动作委托方法。当我将Action<string>
更改为Action<object>
和PritMessage
参数以反对其工作时,但“string
编译器会抛出错误。
最佳重载方法匹配 'System.Threading.Tasks.Task.Task(System.Action,object)'。
参数1:无法从'System.Action&lt; string&gt;'转换至 'System.Action&LT;对象&gt;'
static void Main(string[] args)
{
string message = "test";
Action<string> print = PrintMessage;
Task task = new Task(print, message);
task.Start();
Console.ReadKey();
}
static void PrintMessage(string message)
{
Console.WriteLine(message);
}
答案 0 :(得分:1)
如果您检查Task
constructors,则会发现您无法使用Action创建一个除了没有参数或单个object
参数之外的任务。
对于此特定示例,您只需使用lambda运行Task
,如下所示:
Task.Run(() =>
{
PrintMessage(message);
}
然而,更好的方法是更改签名并转换参数:
static void Main(string[] args)
{
var message = "test";
Task task = new Task(PrintMessage, message);
task.Start();
Console.ReadKey();
}
static void PrintMessage(object messageObj)
{
var message = messageObj as string;
Console.WriteLine(message);
}
或者只是在Console中打印对象:
static void PrintMessage(object message)
{
Console.WriteLine(message);
}