title: Run async function on background thread?
body: <p>I'm working on a project that includes a server and a client.
  The client sends every second a UDP packet to the server, and according to the server's response it might open a TCP connection with the server (and recieve files from the server), the client's program has a GUI which I don't want to block (made in WPF MVVM), and also it's problematic to start async function on constructor of the MainWindow as constructors can't be async.
  So my question is, can I and should I run async functions on a background thread? Does the async improve performance if it's on a background thread, I'm talking about the difference between these options:</p>
  
  <pre><code>public MainWindow()
  {
      InitializeComponent();
      DirectoryViewModel DirectoryVM = new DirectoryViewModel();
      this.DataContext = DirectoryVM;
      DirectoryVM.StartListen(); //Unwanted as constructor won't finish
  }
  </code></pre>
  
  <p>To </p>
  
  <pre><code>public MainWindow()
  {
      InitializeComponent();
      DirectoryViewModel DirectoryVM = new DirectoryViewModel();
      this.DataContext = DirectoryVM;
      Task.Run(DirectoryVM.StartListen()); //Possible but async might be faster
  }
  </code></pre>
  
  <p>To</p>
  
  <pre><code>public MainWindow()
  {
      InitializeComponent();
      DirectoryViewModel DirectoryVM = new DirectoryViewModel();
      this.DataContext = DirectoryVM;
      Task.Run(async () =&gt; await DirectoryVM.StartListenAsync()); //Is it faster than the second option?
  }
  </code></pre>
  
  <p>From what I've seen I shouldn't run async code on background thread like this, but why? Isn't it faster than running sync code on a background thread? 
  Also I guess it's not really different but on my server I'll create a constant running thread that listens for tcp connections and will send files over it, should I make the send file function async or not?</p>
  
  <p>Thanks!</p>