我正在使用c#和Xamarin构建一个Android应用程序 我有一个创建倒数计时器的方法,并且不阻止UI该方法是异步的。 倒计时结束后,该方法调用另一种方法,即向服务器发送内容。如果服务器响应为“true”,则第二种方法调用第三种方法,该方法也是异步方法 问题是第三种方法被调用两次,然后我看到有两个任务在后台运行。
第一种方法(倒数计时器):
public async Task RunTimerToScheduledTime(DateTime dt)
{
while (savedInstanceState == SavedInstanceState.OnScheduled && dt > DateTime.Now)
{
var sub = dt - DateTime.Now;
RunOnUiThread(() => ScheduledCuontdownTv.Text = string.Format("{0:hh\\:mm\\:ss}", sub));
await Task.Delay(1000);
if(Convert.ToInt32(sub.TotalSeconds) == 60)
{
Log.Debug("WNS", "RunTimerToScheduledTime - 60 sec left");
}
if (Convert.ToInt32(sub.TotalSeconds) == 5)
{
Log.Debug("WNS", "RunTimerToScheduledTime - 5 sec left");
}
}
await ScheduledRideIsDone();
}
第二种方法(向服务器发送内容的方法):
public async Task ScheduledRideIsDone()
{
MakeLoadingLayout();
try
{
var res = await Api.UpdateScheduledRideStatus(SoluVars.Me.IdString, SceheduledRideStatus.Done);
if (!res)
{
GlobalMethods.ShortAlertDialog(this, "bla", "bla");
return;
}
else
{
await MakeActive();
}
}
catch (Exception ex)
{
Log.Debug("WNS", ex.Message);
GlobalMethods.ShortAlertDialog(this, "bla", "bla");
}
}
第三种方法(被调用两次的方法):
public async Task MakeActive()
{
loadingActive.Show();
try
{
var res = await Api.Transofrm(id, currentLocationCoords);
if (res)
{
/// Some long tasks
//Task that should run in the background from now on
await Task.WhenAll(AskForCurrentCityLocation(), UpdateActiveDriverTimeStamp(), UpdateWaitingCustomerAdapter());
}
}
catch (Exception ex)
{
Log.Debug("WNS", ex.InnerException.ToString());
}
}
这是什么问题?谢谢!
答案 0 :(得分:0)
在方法中放置一个断点,然后查看第二次调用它的调用堆栈。