gpt4 book ai didi

c# - 当 backgroundTask 使用时,httpRequest.GetResponseAsync() 在 Windows 通用应用程序中失败?

转载 作者:太空宇宙 更新时间:2023-11-03 15:36:02 24 4
gpt4 key购买 nike

我有以下代码可以从我的通用应用程序调用,它运行良好

// create our request with our data
var data = new JsonObject();
data.Add("param", JsonValue.CreateStringValue("abc"));

// convert to bytes
var dataAsBytes = System.Text.Encoding.UTF8.GetBytes(data.Stringify());

var httpRequest = HttpWebRequest.Create(URL + "Add");
httpRequest.Method = "POST";
httpRequest.ContentType = "application/json;charset=utf-8";

using (var requestStream = await httpRequest.GetRequestStreamAsync())
{
requestStream.Write(dataAsBytes, 0, dataAsBytes.Length);
}

var httpResponse = await httpRequest.GetResponseAsync();

using (var responseStream = httpResponse.GetResponseStream()) {
....
}

但是当我从 backgroundTask 执行此代码时,此代码似乎停止在 var httpResponse = await httpRequest.GetResponseAsync() 上?

要设置我的后台任务,我有以下代码。

var taskRegistered = false;
var taskName = "Upload Background Task";
var background = Windows.ApplicationModel.Background;
var iter = background.BackgroundTaskRegistration.allTasks.first();

while (iter.hasCurrent) {
var task = iter.current.value;

if (task.name === taskName) {
taskRegistered = true;
break;
}

iter.moveNext();
}

if (taskRegistered) {
successCallback(); // my javascript success callback
} else {
Windows.ApplicationModel.Background.BackgroundExecutionManager.requestAccessAsync().then(function () {
var builder = new Windows.ApplicationModel.Background.BackgroundTaskBuilder();

builder.name = taskName;
builder.taskEntryPoint = "CordovaApp.Library.UploadTask";
builder.setTrigger(new Windows.ApplicationModel.Background.TimeTrigger(15, false));
builder.addCondition(new Windows.ApplicationModel.Background.SystemCondition(Windows.ApplicationModel.Background.SystemConditionType.internetAvailable));

return builder.register();
}).done(function () {
successCallback();
}, function (err) {
errorCallback(err);
});
}

为什么这不起作用?如果我使用 visual studio 手动运行任务,它会在此行进行故障转移,如果我让 backgroundTask 在 15 分钟后自行运行,它会在此行进行故障转移吗?

最佳答案

问题已解决。

我将 async 关键字添加到我的 backgroundTask Run 方法中,这样我就可以调用我的异步方法。

取而代之的是,我从后台 Run 方法中删除了异步键,并使用调用异步代码

var result = Task.Run(async() => {
return myAsyncMethod();
}).Result;

现在一切正常

关于c# - 当 backgroundTask 使用时,httpRequest.GetResponseAsync() 在 Windows 通用应用程序中失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31852926/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com