title: async Exception not being caught
body: <p>I have a windows service that references the following code. My code that uses the below method contains a <code>try..catch</code> block but it doesn't seem to <code>catch</code> <code>RefereshTokenException</code> that is <code>thrown</code> in the below method. Obviously my understanding of <code>async</code> is not correct. </p>
  
  <pre><code>private async void RefreshTokens()
  {
      try
      {
          var cognito = new CognitoApi();
          var response = cognito.TokenRefresh(_refreshToken);
  
          if (response.HttpStatusCode == HttpStatusCode.OK)
          {
              _idToken = new AwsToken(response.AuthenticationResult.IdToken);
              _accessToken = new AwsToken(response.AuthenticationResult.AccessToken);
          }
          else
          {
              await _signIn(_credentials.SiteId, _credentials.LocationId, null);
          }
      }
      catch (NotAuthorizedException)
      {
          await _signIn(_credentials.SiteId, _credentials.LocationId, null);
      }
      catch (Exception ex)
      {
          throw new RefreshTokenException("Failed refreshing tokens.", ex);
      }
  }
  </code></pre>
  
  <p>This is the code that calls <code>RefreshTokens</code></p>
  
  <pre><code>public async void Process(QueueMessage queueMessage, Action&lt;QueueMessage&gt; retryAction)
  {
      _processingCounter.Increment();
  
      try
      {
          ......
          IAwsToken idToken = authenticationService.Tokens.IdToken; //This is the code that calls "RefreshTokens" method
          ........
      }
      catch (Exception ex)
      {
          //Code never reaches here...
          _logger.Error("Error in ProcessMessage", ex);
      }
  
      _processingCounter.Decrement();
  }
  </code></pre>