netmq から株式ティッカー/注文/取引を受け取り、ストリームを IObservable に変換し、WPF フロントエンドに表示する典型的な株式取引プログラムを作成しようとしています。ReceiveString ループがメイン (UI) スレッドをブロックしないように、NetMQ ブロッキング ReceiveString で async/await を使用しようとしました (文字列入力を期待しているとします)。私はまだ C# に慣れていないので、この投稿で Dave Sexton の回答を取り上げます: ( https://social.msdn.microsoft.com/Forums/en-US/b0cf96b0-d23e-4461-9d2b-ca989be678dc/where -is-iasyncenumerable-in-the-lastest-release?forum=rx ) そして、次のようないくつかの例を書き込もうとしています:
using System;
using System.Threading;
using System.Threading.Tasks;
using System.Collections.Generic;
using NetMQ;
using NetMQ.Sockets;
using System.Reactive;
using System.Reactive.Linq;
namespace App1
{
class MainClass
{
// publisher for testing, should be an external data publisher in real environment
public static Thread StartPublisher(PublisherSocket s)
{
s.Bind("inproc://test");
var thr = new Thread(() => {
Console.WriteLine("Start publishing...");
while (true) {
Thread.Sleep(500);
s.Send("hello");
}
});
thr.Start();
return thr;
}
public static IObservable<string> Receive(SubscriberSocket s)
{
s.Connect("inproc://test");
s.Subscribe("");
return Observable.Create<string>(
async observer =>
{
while (true)
{
var result = await s.ReceiveString();
observer.OnNext(result);
}
});
}
public static void Main(string[] args)
{
var ctx = NetMQContext.Create();
var sub = ctx.CreateSubscriberSocket();
var pub = ctx.CreatePublisherSocket();
StartPublisher(pub);
Receive(sub).Subscribe(Console.WriteLine);
Console.ReadLine();
}
}
}
「cannot await string」でコンパイルに失敗します。タスクを期待している可能性があることは理解していますが、全体を起動する方法がよくわかりません。
もう一度ラップします: 私が達成しようとしているのは、単純なブロック API を使用して netmq からティッカー/注文/取引の IObservable ストリームを取得することですが、メイン スレッドを実際にブロックすることはありません。
私にできることはありますか?どうもありがとう。