zoukankan      html  css  js  c++  java
  • 蠢货之TaskCompletionSource 带事件的同步调用

    看了这个文章 https://www.cnblogs.com/kewei/p/14339919.html

    终于知道了事件的这种方式怎么来搞同步调用。看别人的文章。我copy一把。记录下。

    因为拍黄片的不会调SignalR,我只好转成同步的。

    [HttpGet]
    public async Task<IActionResult> GetHubInfo()
    {
    try
    {
    TaskCompletionSource<string> _source = new TaskCompletionSource<string>();
    var connection = new HubConnectionBuilder()
    .WithUrl("http://127.0.0.1:9026/ChatHub")
    .Build();
    await connection.StartAsync();
    using (connection.On<string>("ReceiveMessage", (s) =>
    {

    //这里我要copy一下别人的记录下,可能的情况。

    //var tcs = new TaskCompletionSource<string>();

    //var wc = new WebClient();

    //wc.DownloadStringCompleted += (s, e) => {

    //if (e.Error != null)

    //tcs.TrySetException(e.Error);

    //else if (e.Cancelled) tcs.TrySetCanceled();

    //else tcs.TrySetResult(e.Result);

    //};
    _source.TrySetResult(s);
    }))
    {

    TimeSpan timeout = new TimeSpan(0, 0, 5);
    using var cts = new CancellationTokenSource();
    cts.Token.Register(() => _source.TrySetException(new TimeoutException()), useSynchronizationContext: false);
    cts.CancelAfter(timeout);
    await connection.SendAsync("winFormsApp", "a", "b");

    return Ok(await _source.Task);
    }
    }
    catch (Exception ex)
    {
    return Ok(ex.ToString());
    }
    }

     

     

  • 相关阅读:
    数据库
    Activity组件
    view,视图组件
    360导航板式
    service音乐播放
    service
    音乐播放器组件
    获取时间字符串
    JDK服务器存储
    数据库_黑名单练习_完善服务广播
  • 原文地址:https://www.cnblogs.com/forhell/p/14341360.html
Copyright © 2011-2022 走看看