title: Getting a Cannot await void, on a method that I have want to await on
body: <p>I'm on a team writing a WPF app. We have to make it so that when a user hides/shows different columns that it will reflect that in a ReportViewer control on one of the views. In testing we've found that it takes a long time to add the data to the ReportViewer's data sources; sometimes on the order of several seconds to possibly a minute. Too long I think for the users. So I'm trying to use C#'s async and await. However, when I applied await to the line that is the process hog and then compile it, I get an error from the C# compiler, "Cannot await 'void'". In this case, I cannot change what the .NET framework returns, its void. So how do I handle this situation? Here's the code:</p>
  
  <pre><code>private async Task GenerateReportAsync()
  {
      DataSet ds = new DataSet();
      DataTable dt = new DataTable();
      dt.Clear();
      int iCols = 0;
      //Get the column names
      if (Columns.Count == 0)     //Make sure it isn't populated twice
      {
          foreach (DataGridColumn col in dataGrid.Columns)
          {
              if (col.Visibility == Visibility.Visible)
              {
                  Columns.Add(col.Header.ToString());     //Get the column heading
                  iCols++;
              }
          }
      }
      //Create a DataTable from the rows
      var itemsSource = dataGrid.ItemsSource as IEnumerable&lt;Grievance&gt;;
      if (this.rptViewer != null)
      {
          rptViewer.Reset();
      }
      rptViewer.LocalReport.DataSources.Clear();
      if (m_rdl != null)
      {
          m_rdl.Dispose();
      }
      Columns = GetFieldOrder();
      m_rdl = CoreUtils.GenerateRdl(Columns, Columns);
      rptViewer.LocalReport.LoadReportDefinition(m_rdl);
      //the next line is what takes a long time
      await rptViewer.LocalReport.DataSources.Add(new ReportDataSource("MyData", CoreUtils.ToDataTable(itemsSource)));
      rptViewer.RefreshReport();
  }
  </code></pre>