Я преобразую класс CancellationToken в двоичный файл, чтобы я мог сохранить его в локальном хранилище для использования в будущем, так как поток будет непрерывным, когда я преобразую его обратно, будет ли он по-прежнему функционировать таким же образом и отменяет заданную задачу?
Сначала я запускаю Задачу с помощью инициализированного токена, затем сохраняю его в БД с помощью функции ObjectToBinary.Приведенный ниже код показывает, как я пытаюсь отменить токен.
Если это невозможно, у кого-нибудь есть альтернативное решение моей проблемы?
public static async Task StopAccountRunning(int fid)
{
using (gg db = new gg())
{
var acc = db.FInfos.FirstOrDefault(account => account.Fid == fid);
var token = BinaryToObject<CancellationToken>(acc.ProcessCancellationToken, true);
var tokenSrc = BinaryToObject<CancellationTokenSource>(acc.ProcessCancellationSource);
if(token.CanBeCanceled)
{
tokenSrc.Cancel();
}
acc.isAccountRunning = 0;
await db.SaveChangesAsync();
}
}
public static T BinaryToObject<T>(byte[] data) where T : class
{
BinaryFormatter formatter = new BinaryFormatter();
using (Stream s = new MemoryStream(data))
{
return (T)formatter.Deserialize(s);
}
}
public static T BinaryToObject<T>(byte[] data, bool isStruct) where T : struct
{
BinaryFormatter formatter = new BinaryFormatter();
using (Stream s = new MemoryStream(data))
{
return (T)formatter.Deserialize(s);
}
}
public async static Task<byte[]> ObjectToBinary<T>(T data)
{
byte[] bytes;
BinaryFormatter formatter = new BinaryFormatter();
using (MemoryStream s = new MemoryStream())
{
formatter.Serialize(s, data);
bytes = s.ToArray();
}
return bytes;
}