相关疑难解决方法(0)

是否有可能在运行时判断对象是否等待?

最近了解到任何带有GetAwaiter返回awaiter的方法的对象都可以成为await-ed.即使它是一种扩展方法也是如此,这意味着如果您愿意,基本上任何对象都可以制作await.

但有没有办法在运行时告诉对象是否await可用? 正常反射将不起作用,因为它不会列出对象的扩展方法.

在提出这个问题时,我并没有特别的需要,我只是好奇是否有可能.

c# async-await

11
推荐指数
1
解决办法
384
查看次数

如果没有GetAwaiter方法,我可以等待吗?

我看到一些关于设计自定义等待类型的文章:

http://books.google.com.br/books?id=1On1glEbTfIC&pg=PA83&lpg=PA83&dq=create+a+custom+awaitable+type

现在考虑以下示例:

<Button x:Name="BtnA"
        Width="75"
        Margin="171,128,0,0"
        HorizontalAlignment="Left"
        VerticalAlignment="Top"
        Click="BtnA_Click"
        Content="Button A" />
<Button x:Name="BtnB"
        Width="75"
        Margin="273,128,0,0"
        HorizontalAlignment="Left"
        VerticalAlignment="Top"
        Content="Button B"  Click="BtnB_OnClick" />
Run Code Online (Sandbox Code Playgroud)

和:

private async void BtnA_Click(object sender, RoutedEventArgs e)
{
    MessageBox.Show("Awaiting Button B..");

    var sx = Observable.FromEvent<MouseButtonEventHandler, 
                                  MouseButtonEventArgs>(a => (b, c) => a(c),
                                  add => BtnB.PreviewMouseDown += add,
                                  rem => BtnB.PreviewMouseDown -= rem)
       .Do(a => a.Handled = true)
       .Take(1);

    await sx;

    MessageBox.Show("Button B Pressed after Button A");
}

private void BtnB_OnClick(object sender, RoutedEventArgs e)
{
    MessageBox.Show("Button B Pressed …
Run Code Online (Sandbox Code Playgroud)

.net c# system.reactive async-await

7
推荐指数
1
解决办法
8250
查看次数

标签 统计

async-await ×2

c# ×2

.net ×1

system.reactive ×1