我正在尋找一種方式來調用在不同線程上的函數。跨線程調用(c#,WaveEngine)
我們正在使用一個服務器(gRPC),它在接收到數據時發送數據,一個任務在客戶端運行,一旦接收到新數據就會繼續循環(stream.MoveNext()
)。
一旦接收到新的數據將調用一個函數,雖然這是一個不同的線程中完成
注:我沒有得到Cross-Thread Exception
,這是因爲它的構建和測試開發機上是禁用期間不可能。
public static async Task ButtonStream()
{
var rpc = buttonClient.buttonPressed(new ButtonsSubscription());
try
{
using (rpc)
{
var stream = rpc.ResponseStream;
while (await stream.MoveNext())
{
if (stream.Current.Id >= persistantDic.Count)
{
int a = stream.Current.Id;
int b = persistantDic.Count;
//Console.WriteLine("{0} >= {1}", a,b);
throw new Exception("Something went wrong");
}
else
{
buttonPressed = stream.Current.Id;
gRPCEvents.ButtonUpdates?.Invoke();
Console.WriteLine("Invoked from thread: "+Thread.CurrentThread.ManagedThreadId);
}
}
}
}
catch (RpcException e)
{
throw;
}
}
ButtonUpdates?.Invoke
運行中的主要功能(線程ID 1),當我按下F1(僅適用於測試目的),我看到它的運行對線程1的功能,但是當它被調用的線程4(其運行功能或9,有時會改變)。
編輯
在主線程功能是訂閱調用的委託,這將是一個任務調用上線4
那麼你的問題是什麼? –
在不同的線程中調用這些函數的方式是什麼 – Maxdg
當你使用'async'時,你*不需要調用。 –