2016-03-09 2 views
2

Я создал простой Azure WebJob, который вызывает асинхронную задачу, и я пытаюсь использовать TextWriter для регистрации некоторой информации. Запись в журнал до вызова задачи async в порядке, но после вызова TextWriter закрыт. В приведенном ниже примере кода я просто вызываю Task.Delay() для демонстрации.TextWriter неожиданно закрыт после асинхронного вызова в Azure webjob

Это не имеет значения, если я изменить await log.WriteLineAsync("") вызовы log.WriteLine("")

public class Program 
{ 
    // Please set the following connection strings in app.config for this WebJob to run: 
    // AzureWebJobsDashboard and AzureWebJobsStorage 
    static void Main() 
    { 
     JobHostConfiguration config = new JobHostConfiguration(); 
     JobHost host = new JobHost(config); 
     host.Call(typeof (Program).GetMethod("DoJobNow"), new { value = "Hello world!" }); 
     host.RunAndBlock(); 
    } 


    [NoAutomaticTrigger] 
    public async static void DoJobNow(string value, TextWriter log) 
    { 
     await log.WriteLineAsync("Write with textwriter"); 
     await log.WriteLineAsync("Write with textwriter again - still open"); 
     await Task.Delay(100); 
     await log.WriteLineAsync("TextWriter is closed?? Exception here!"); 

    } 
} 

Когда я запускаю этот код локально, я получаю System.ObjectDisposedException на последнем журнале вызова, и если я комментирую на Task.Delay линии, она работает отлично! Почему это?

+0

возможно дубликат: http://stackoverflow.com/questions/31507384/azure-webjob-textwritter-logger-being-disposed-in-the-middle-of -my-метод –

ответ

3

Чтобы вернуть задачу, вам необходимо установить возвращаемый тип DoJobNow. Вызывающий поток будет вызывать TextWriter быть расположены

[NoAutomaticTrigger] 
public async static Task DoJobNow(string value, TextWriter log) 
{ 
    await log.WriteLineAsync("Write with textwriter"); 
    await log.WriteLineAsync("Write with textwriter again - still open"); 
    await Task.Delay(100); 
    await log.WriteLineAsync("TextWriter is closed?? Exception here!"); 
}