I have a MVC WinForms application. I am using Dependency Injection with Ninject as the IoC container.
public class SqlObjectExplorerController : ToolController, ISqlObjectExplorerController
{
private ISqlObjectExplorerView view = null;
private SqlServerStructureProvider structureProvider;
private IProgress<IProgressInfo> progress;
public SqlObjectExplorerController(ISqlObjectExplorerView view)
{
if (view == null)
throw new ArgumentNullException("view");
this.view = view;
InitializeEventHandlers();
...
}
private void InitializeEventHandlers()
{
(view as ToolView).Initialize += new EventHandler(async (s, e) => await RefreshObjectExplorerAsync());
view.OnRefreshObjectExplorerClicked += new EventHandler(async (s, e) => await RefreshObjectExplorerAsync());
view.OnAddServerInstanceClicked += new EventHandler(async (s, e) => await AddServerInstanceAsync());
view.OnNewSqlQueryClicked += new EventHandler<NewSqlQueryRequestEventArgs>((s, e) => OpenNewSqlQueryDocument(e));
view.OnExpandRequested += new EventHandler<BeforeExpandEventArgs>((s, e) => BuildSubStructureForDatabaseNode(e));
}
private async Task RefreshObjectExplorerAsync()
{
await InitializeObjectExplorerAsync();
view.InitializeObjectExplorer(ServerCache);
}
... // Lots more code.
My question concerns the use of async/await in setting up the likes of += new EventHandler(async (s, e) => await RefreshObjectExplorerAsync());
. There are some tasks I need to do on a background thread, so I am using async/await, my questions are about my understanding:
In doing
async (s, e) => await SomeMethodAsync()
I am merely setting up an event handler equivalent toprivate async void SomeMethodAsync(object s, EventArgs e) { ... }
. Which I think is fine in this case of the fire-and-forgetTask
I want to undertake, is it?I don't think there are any problems in setting this up these async handlers in the ctor of the controller, am I right?
The code seems to work fine, but is there something I am not seeing?