任务<string>不返回null

时间:2017-11-06 16:44:12

标签: c#

尝试创建返回“aaaa”的Task。在下面的情况下,我的结果为null:

   public static void caller()
   {
          Task<string> getStringTask = delayJob();
          string urlContents = await getStringTask;
          Console.WriteLine(urlContents);
   }

   public static Task<string> delayJob()
    {
        Thread.Sleep(1000);
        Console.WriteLine("sleep done");
        return new Task<string>(()=> "aaaa" );
    }

我做错了什么?

1 个答案:

答案 0 :(得分:1)

这是更好的选择。如果要异步运行此方法,则不应使用Thread.Sleep,因为它会阻止调用方法的线程。

    public static async Task<string> delayJob()
    {
        await Task.Delay(1000);
        Console.WriteLine("sleep done");
        return "aaaa";
    }

编辑: 您的示例不会打印任何内容,因为您尚未启动任务。你刚刚创建了它。

EDIT2:

基本上,如果你想避免延迟,你可以这样做但通常应该避免如下所述:https://blog.stephencleary.com/2013/11/taskrun-etiquette-examples-dont-use.html

    public static Task<string> delayJob()
    {
      return Task.Run(()=>"aaaa");
    }