В моем приложении Xamarin.iOS я хочу повторить попытку загрузки после сбоя из-за ошибки http.
Но я не уверен, как реализовать.
Я думал, что мне следует просто продолжать создавать новую задачу каждый раз, когда она завершается с ошибкой http?
Это правильный способ реализации?
NSUrlSessionTaskDelegate:
public async override void DidCompleteWithError(NSUrlSession session, NSUrlSessionTask task, NSError error)
{
if (task.Response != null)
{
if (task.Response is NSHttpUrlResponse httpResponse)
{
if (httpResponse.StatusCode == 200)
{
//some clean up logic here
}
else if (httpResponse.StatusCode > 400 && httpResponse.StatusCode < 500)
{
//what to do to upload again?
}
else
{
var applicationException = new ApplicationException("Server returned 500");
Crashes.TrackError(applicationException);
}
}
}
}
AppDelegate:
public NSUrlSession InitBackgroundSession()
{
string identifier = "com.uba.BookingUploadBackgroundSession";
INSUrlSessionDelegate backgroundUploadSessionDelegate = new BackgroundBookingUploadSessionDelegate();
using (var config = NSUrlSessionConfiguration.CreateBackgroundSessionConfiguration(identifier))
{
config.HttpMaximumConnectionsPerHost = 4;
config.TimeoutIntervalForResource = 300.0; //5mins
return NSUrlSession.FromConfiguration(config, backgroundUploadSessionDelegate, new NSOperationQueue());
}
}
//gets called when user taps Submit from ViewController
public void UploadFile(BookingDTO newBookingDTO)
{
//logic to create NSMutableUrlRequest omitted
var uploadTask = session.CreateUploadTask(request, NSUrl.FromFilename(filename));
uploadTask.TaskDescription = newBookingDTO.ClientId; //we need the booking id so we can delete it later
uploadTask.Resume();
}
Я приму любой ответ на C #, Swift или Objective-C