在Programming C#一书中,它有一些示例代码SynchronizationContext:
SynchronizationContext originalContext = SynchronizationContext.Current;
ThreadPool.QueueUserWorkItem(delegate {
string text = File.ReadAllText(@"c:\temp\log.txt");
originalContext.Post(delegate {
myTextBox.Text = text;
}, null);
});
Run Code Online (Sandbox Code Playgroud)
我是线程的初学者,所以请详细回答.首先,我不知道上下文是什么意思,程序保存在originalContext什么?当Post方法被触发时,UI线程会做什么?
如果我问一些愚蠢的事情,请纠正我,谢谢!
编辑:例如,如果我只是写myTextBox.Text = text;在方法中,有什么区别?
所以,我一直在开发一个使用 REST API 请求的应用程序,但是,由于某种原因,该 API 随机变得无响应(有时它会在 3 秒内给出响应,有时请求会花费很长时间,以至于它会抛出 timeOutexception)所以每当我调用一个电话时,如果在一定时间内没有检索到响应,我会使用此代码重新启动调用:
bool taskCompletion = false;
while(taskCompletion == false)
{
try
{
using (CancellationTokenSource cts = new CancellationTokenSource())
{
cts.CancelAfter(timeSpan);
await task(cts.Token);
taskCompletion = true;
}
}
catch (OperationCanceledException)
{
taskCompletion = false;
}
}
Run Code Online (Sandbox Code Playgroud)
我的 API 请求之一如下:
public static async Task<Result> task(CancellationToken ct)
{
string Url = baseurl
ApiHelper instance = new ApiHelper();
using (HttpResponseMessage response = await instance.ApiClient.GetAsync(Url, ct))
{
if (response.IsSuccessStatusCode)
{
var x = await response.Content.ReadAsStringAsync();
var result = …Run Code Online (Sandbox Code Playgroud)