Ho provato CancellationTokenSource
ma non posso farlo. E l'ho fatto a modo mio. E funziona.
namespace Blokick.Provider
{
public class SignalRConnectProvider
{
public SignalRConnectProvider()
{
}
public bool IsStopRequested { get; set; } = false; //1-)This is important and default `false`.
public async Task<string> ConnectTab()
{
string messageText = "";
for (int count = 1; count < 20; count++)
{
if (count == 1)
{
//Do stuff.
}
try
{
//Do stuff.
}
catch (Exception ex)
{
//Do stuff.
}
if (IsStopRequested) //3-)This is important. The control of the task stopping request. Must be true and in inside.
{
return messageText = "Task stopped."; //4-) And so return and exit the code and task.
}
if (Connected)
{
//Do stuff.
}
if (count == 19)
{
//Do stuff.
}
}
return messageText;
}
}
}
E un'altra classe della chiamata al metodo:
namespace Blokick.Views
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class MessagePerson : ContentPage
{
SignalRConnectProvider signalR = new SignalRConnectProvider();
public MessagePerson()
{
InitializeComponent();
signalR.IsStopRequested = true; // 2-) And this. Make true if running the task and go inside if statement of the IsStopRequested property.
if (signalR.ChatHubProxy != null)
{
signalR.Disconnect();
}
LoadSignalRMessage();
}
}
}
fonte
2017-11-30 20:59:04
bella spiegazione. Ho una domanda, come funziona quando non abbiamo un metodo anonimo in Task.Factory.StartNew? come Task.Factory.StartNew (() => ProcessMyMethod(), cancellationToken) –
Perché non è possibile? Ecco un [esempio] (http://stackoverflow.com/a/19311606/1845402). – starteleport
cosa succede se c'è una chiamata bloccante che non ritorna all'interno dell'attività in esecuzione? – mehmet6parmak