2017-07-17 78 views
0

有没有办法让任务等待,直到Task上下文中的某种标志被触发?以此代码为例:在结束C#任务之前等待事件解决

class SomeClass 
{ 
    public event Action SomeEvent; 

    public void triggerEventIn1Sec() 
    { 
     Task.Run(() => 
     { 
      System.Threading.Thread.Sleep(1000); 
      SomeEvent.Invoke(); 
     }); 
    } 
} 

class Program 
{ 

    static void Main(string[] args) 
    { 
     Task mtask1 = SomeTask(); 
     mtask1.Wait(); 
     Console.WriteLine("Task1 completed"); 
     Console.ReadLine(); 
    } 

    public static Task SomeTask() 
    { 
     return Task.Run(() => { 
      var c = new SomeClass(); 
      c.SomeEvent +=() => 
      { 
       Console.WriteLine("Some Event invoked"); 
      }; 
      c.triggerEventIn1Sec(); 
     }); 
    } 
} 

SomeTask()函数返回的任务在Main函数中等待。在SomeTask任务触发事件之前,等待完成。

有什么方法在此任务功能

return Task.Run(() => { 
     var c = new SomeClass(); 
     c.SomeEvent +=() => 
     { 
      Console.WriteLine("Some Event invoked"); 
     }; 
     c.triggerEventIn1Sec(); 
    }); 

指定要等到事件已经“完成任务”之前被触发?

+0

当您使用基于任务的程序时,首先发生的事件?只需要'triggerEventIn1Sec'返回一个'任务',该任务将在1秒后完成,而不是在1秒内触发一个事件。 – Servy

+0

@Servy我想要有多个任务做不同的不相关的事情。这些异步任务中的任何一个都可以将消息推送到消息传递者并等待响应,响应是需要和事件处理器接收的事件。直到我们收到来自消息代理的响应或抛出异常,任务才能完成 – tt9

回答

-1

您可以使用无限循环,打破如果标志等于事实,因为在

while (true) 
{ 
    if (someflag) 
    break while; 
} 

,并设置someflag真正在你的另一种方法,确保它是可见的你为什么要使用这两种方法