Opting to bat, the islanders rode on Kumar Sangakkara's patient 76 and skipper Angelo Mathews' breezy 41-ball 45 to post a competitive 253/6 at the Sher-e-Bangla National Stadium.
In reply, Afghanistan were bundled out for 124 in 38.4 overs, sealing Sri Lanka's place in the final of the five-nation continental tournament, and further diminishing India's chances.
India have lost two of their three matches and need to win with a bonus point against Afghanistan and hope that Bangladesh score an upset victory over Pakistan in their last respective round-robin matches. Afghanistan's run-chase never really got the momentum as they lost wickets at regular intervals, slipping to 73 for five in the 21st over. Their batting was in stark contrast to the efforts put in by the Afghan bowlers, who kept the free-flowing Lankan batsmen in check for a major part of their innings before Mathews let loose.
Sangakkara, though, was the man who kept the Lankan innings afloat when the going got difficult. Afghan captain Mohammad Nabi contributed 37, while Noor Ali Zadran (21) and Asghar Stanikzai (27) got out after getting starts. Nabi hit three fours and a six during his 40-ball knock. The rest of the batting just caved in without putting up any sort of resistance, a far cry from their outing against hosts Bangladesh, who were humbled by the spirited strife-torn nation a couple of days ago.
Among the wickets for Sri Lanka were Ajantha Mendis (3/11), Thisara Perera (3/29) and Chaturanga de Silva (2/29), who proved to be handful for the Afghani batsmen.