private async Task ExecuteTaskAsync() { Encoding encoding; var encodingName = this.FileEncoding; if (String.IsNullOrEmpty(encodingName)) { encoding = Encoding.UTF8; } else { encoding = Encoding.GetEncoding(encodingName); } var encodingInfo = encoding.CreateDefaultEncodingInfo(); var vendor = await this.LoadDynamically <SQLVendor>(this.VendorPackageID, this.VendorPackageVersion, this.VendorAssemblyPath, this.VendorTypeName); if (vendor != null) { var user = await this.LoadDynamically <SQLGeneratorUser>(this.GeneratorPackageID, this.GeneratorPackageVersion, this.GeneratorAssemblyPath, this.GeneratorTypeName); if (user != null) { var path = Path.GetFullPath(this.OutputFile); using (var fs = File.Open(path, FileMode.Create, FileAccess.Write, FileShare.None)) { var streamWriter = StreamFactory.CreateUnlimitedWriter(fs, this._cancellationSource.Token); var writer = WriterFactory.CreateTransformableWriter <String, StreamWriterWithResizableBuffer, IEnumerable <Char> >( new StreamCharacterWriter(encodingInfo, 1024), streamWriter, ToCharEnumerable ); foreach (var sql in user.GenerateSQL(vendor)) { await writer.TryWriteAsync(sql); } await streamWriter.FlushAsync(); } this.Log.LogMessage(MessageImportance.High, $"Successfully wrote SQL file \"{path}\"."); } } }