/// <summary> /// Creates the dependency graph asynchronously. /// </summary> /// <param name="path">The dependency definition file.</param> /// <param name="log">The logger to log messages with.</param> /// <param name="userCallback">The user callback.</param> /// <param name="userState">The state of the user.</param> /// <returns>AsyncResult object</returns> public IAsyncResult BeginGetDependencyGraph(string path, ILogger log, AsyncCallback userCallback, object userState) { Logger.Instance().Log(TraceLevel.Info, "Starting asynchronous graph generation ..."); var asyncResult = new AsyncResult <IGraph>(userCallback, userState); ThreadPool.QueueUserWorkItem(o => { try { var graph = GetDependencyGraph(path, log); asyncResult.SetAsCompleted(graph, false); Logger.Instance().Log(TraceLevel.Info, "Asynchronous graph generation finished successfully"); } catch (Exception ex) { var error = new DependencyServiceException( "Error while retrieving the dependency graph: " + ex.Message, ex); asyncResult.SetAsCompleted(error, false); Logger.Instance().Log(TraceLevel.Error, "Asynchronous graph download failed: {0}", ex.Message); } }); return(asyncResult); }
/// <summary> /// Cleans up the downloaded components asynchronously. /// </summary> /// <param name="graph">The dependency graph.</param> /// <param name="log">The logger to log messages with.</param> /// <param name="userCallback">The user callback.</param> /// <param name="userState">State of the user.</param> /// <returns>IAsyncResult object</returns> public IAsyncResult BeginCleanupGraph(IGraph graph, ILogger log, AsyncCallback userCallback, object userState) { Logger.Instance().Log(TraceLevel.Info, "Starting asynchronous graph cleanup ..."); var asyncResult = new AsyncResult <bool>(userCallback, userState); ThreadPool.QueueUserWorkItem(o => { try { CleanupGraph(graph, log); asyncResult.SetAsCompleted(true, false); Logger.Instance().Log(TraceLevel.Info, "Asyncronous graph cleanup finished successfully"); } catch (Exception ex) { var error = new DependencyServiceException( "Error while cleaning up the dependency graph: " + ex.Message, ex); asyncResult.SetAsCompleted(error, false); Logger.Instance().Log(TraceLevel.Error, "Asynchronous graph cleanup failed: {0}", ex.Message); } }); return(asyncResult); }