I am trying to use task to detect deadlock and shuffle in my match-3 project. But It does not work until I press the exit button.
public static async void CheckDeadlock(Tile[,] Tiles)
{
var isDeadlocked = await Task.Run(() =>
{
return IsShuffleNeeded(Tiles);
});
if (isDeadlocked)
{
//DoShuffle
Debug.Log("Shuffle");
}
}
public static async Task<bool> IsShuffleNeeded(Tile[,] Tiles)
{
for (int i = 0; i < Tiles.GetLength(1); i++)
{
for (int j = 0; j < Tiles.GetLength(0); j++)
{
if (!FindPossibleMatches(Tiles[j, i]))
{
return true;
}
await Task.Yield();
}
}
return false;
}
Also I am calling task here. DoInitialFill method calling at Start method.
public void DoInitialFill(Tile[,] Tiles)
{
for (int i = 0; i < Tiles.GetLength(1); i++)
{
for (int j = 0; j < Tiles.GetLength(0); j++)
{
var newPiece = pieceProvider.GetRandomPiece();
Tiles[j, i].SetPiece(newPiece);
newPiece.SetPosition(Tiles[j, i].transform.position);
while (CheckInitialMatch(Tiles[j, i]))
{
poolManager.ReleaseObject(newPiece);
newPiece = pieceProvider.GetRandomPiece();
Tiles[j, i].SetPiece(newPiece);
newPiece.SetPosition(Tiles[j, i].transform.position);
}
}
}
DeadlockHandler.CheckDeadlock(Tiles);
}
Is anyone seeing what is the problem?