title: How to run C# task method on separate thread without using Task.Run()
body: <p>I have console application where I have 2 steps. <em>Step1</em> and <em>Step2</em>. I want <em>Step 1</em> to run on main thread and <em>Step 2</em> on different thread in background, and I am using <code>C# task object</code> for the same.</p>
  
  <p>See below code snippet:</p>
  
  <pre><code>public static Task PrintCount()
  {
       Console.WriteLine("Step 2");
  
       for (var i = 1; i &lt;= 1000; i++)
       {
            Thread.Sleep(1000);
            Console.WriteLine(i);
       }
  
       return Task.FromResult(0); 
  }
  
  static void Main(string[] args)
  {
       Task.Run(() =&gt; PrintCount());
  
       Console.WriteLine("Step 1");
  
       Console.Read();
  }
  </code></pre>
  
  <p>This <strong>works perfectly fine</strong> If I run the PrintCount() method using <strong><code>Task.Run().</code></strong></p>
  
  <p><strong>When I use without it like mentioned below, it is running as a synchronous operation.</strong></p>
  
  <pre><code>var taskResult = PrintCount();
  </code></pre>
  
  <p>In this case, the <em>Step 2</em> will execute first, complete the iteration of 1000 till the method finish and then it will execute <em>Step 1</em>.</p>
  
  <p>The question is-- How would I run Step 2 method <strong>without using Task.Run()</strong> and still I wan to run Step 2 method in async manner on different thread.</p>
  
  <p><strong>What I do believe is</strong> <code>PrintCount()</code> returns the <code>Task</code> object and If we don't await it, it will run asynchronously, BUT it is NOT behaving like that.</p>
  
  <p>Would you please suggest how would I run <code>DoSomehing()</code> on a different thread using <code>Task</code> method without using  Task.Run().</p>
  
  <p>Thanks in advance!</p>
  
  <p><strong>Updates:</strong></p>
  
  <pre><code> public static async Task PrintCount()
          {
              await Task.Delay(TimeSpan.FromSeconds(3));
  
              Console.WriteLine("Step 2");
  
              for (var i = 1; i &lt;= 1000; i++)
              {
                  Thread.Sleep(1000);
                  Console.WriteLine(i);
              }
  
          }
  </code></pre>
  
  <p>This will run on a different thread.</p>
  
  <p>No change in how I calling it.</p>
  
  <pre><code>var taskResult = PrintCount();
  </code></pre>